Member 13153537 Ответов: 1

Как вызвать метод class file в windows form в приложении C# windows.


Я свежее, это мой первый проект.Я написал этот метод непосредственно в windows form.Теперь я хочу реализовать 2-уровневую архитектуру.
Я отправлю код.Фактический метод в проекте windows.И какой код я написал в файле класса и то, и другое.
Теперь, если я создам такой метод, как привязка к combobox.Пожалуйста, помогите мне, как это сделать.

Что я уже пробовал:

this code i was written in windows project
----------------------------------------------

       private void FillBankName()
        {
            SqlConnection con = new SqlConnection(connectionString);
            con.Open();
            SqlCommand cmd = new SqlCommand("select bank_Id,bank_Name from 
   bankdetails", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            Dictionary Dctbnk = new Dictionary();
            Dctbnk.Add("select", "select");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Dctbnk.Add(dt.Rows[i]["bank_Name"].ToString(), dt.Rows[i]["bank_Id"].ToString());
            }
            cmbBankname.ValueMember = "Value";
            cmbBankname.DisplayMember = "Key";
            cmbBankname.DataSource = new BindingSource(Dctbnk, null);
            con.Close();
--thisis i written inclass  file
--------------------------------------------
          public DataTable FillBankName()
        {
            SqlConnection con = new SqlConnection(connectionString);
            con.Open();
            SqlCommand cmd = new SqlCommand("select bank_Id,bank_Name from bankdetails", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            Dictionary<string, string> Dctbnk = new Dictionary<string, string>();
            Dctbnk.Add("select", "select");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Dctbnk.Add(dt.Rows[i]["bank_Name"].ToString(), dt.Rows[i]["bank_Id"].ToString());
            }    
            con.Close();
            return dt;
}      

1 Ответов

Рейтинг:
9

OriginalGriff

Хм. Там много странного кода.
Посмотрите на свой метод FillBankName: почему вы что-то делаете со словарем Dctbank, когда вы не используете его ни для чего после этого, и выбрасываете его, когда метод заканчивается?

Я бы посоветовал вам сделать шаг назад и подумать о том, что вы хотите использовать для передачи данных: словарь или DataTable, и написать функции, которые возвращают соответствующий тип.
Я бы также предложил вам начать использовать Dispose для компонентов SQL: они являются дефицитными ресурсами и должны быть заключены в using блок. Таким образом, DataTable версия будет:

public DataTable FillBankName()
    {
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(connectionString))
        {
        con.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT bank_Id,bank_Name FROM bankdetails", con))
            {
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                {
                sda.Fill(dt);
                }
            }
        }
    return dt;
    }

Многоуровневая организация - это разделение проблем: уровень БД знает только о БД, а уровень представления знает, как взаимодействовать с пользователем и переводить это в то, что может понять уровень данных. Добавление того, что фактически является кодом представления в код данных (например, строки" select"," select"), не является хорошей идеей, поскольку это заставляет слой данных" знать", что происходит. Я бы придерживался DataTable (или, лучше, коллекции определенного класса, специфичного для передаваемых данных) вместо того, чтобы использовать словарь как часть интерфейса.


Member 13153537

Спасибо.

OriginalGriff

Пожалуйста!