Использовать внутреннее соединение с сервером C# SQL - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь получить данные из двух разных таблиц в таблицу данных и назначить их в текстовые поля в C# WinForms. Хотя мне удалось выполнить этот запрос, когда я попробовал его на сервере SQL, но реализовать его на WinForms я не знаю. Это то, что пробовали в моем коде:

 string supplier_id = dataGridView1.CurrentRow.Cells[1].Value.ToString();
                    SqlDataAdapter cmd = new SqlDataAdapter("select New_Supplier.Supplier_Name, New_Supplier.Address, New_Supplier.City, New_Supplier.Contact_No ,Purchase_Entry.Balance from New_Supplier,Purchase_Entry where New_Supplier.'" + supplier_id + "' = Purchase_Entry.'" + supplier_id + "' ", con);
                    DataTable dt = new DataTable(); cmd.Fill(dt);
                    Purchase_Entry.Instance.txtsuppliername.Text = dt.Rows[0][0].ToString();
                    Purchase_Entry.Instance.txtaddress.Text = dt.Rows[0][1].ToString();
                    Purchase_Entry.Instance.txtcity.Text = dt.Rows[0][2].ToString();
                    Purchase_Entry.Instance.txtcontactno.Text = dt.Rows[0][3].ToString();
                    Purchase_Entry.Instance.lblbalance.Text = dt.Rows[0][4].ToString();

Также пробовал:

 string supplier_id = dataGridView1.CurrentRow.Cells[1].Value.ToString(); MessageBox.Show(supplier_id);
                    SqlDataAdapter cmd = new SqlDataAdapter($"select New_Supplier.Supplier_Name, New_Supplier.Address, New_Supplier.City, New_Supplier.Contact_No ,Purchase_Entry.Balance from New_Supplier,Purchase_Entry where New_Supplier.{supplier_id} = Purchase_Entry.{supplier_id} ", con);
                    DataTable dt = new DataTable(); cmd.Fill(dt);
                    Purchase_Entry.Instance.txtsuppliername.Text = dt.Rows[0][0].ToString();
                    Purchase_Entry.Instance.txtaddress.Text = dt.Rows[0][1].ToString();
                    Purchase_Entry.Instance.txtcity.Text = dt.Rows[0][2].ToString();
                    Purchase_Entry.Instance.txtcontactno.Text = dt.Rows[0][3].ToString();
                    Purchase_Entry.Instance.lblbalance.Text = dt.Rows[0][4].ToString();

Но у меня возникла ошибка конкатенации запроса при извлечении данных Пробовал это на SQL сервере, и он работает

select New_Supplier.Supplier_Name, New_Supplier.Address, New_Supplier.City, New_Supplier.Contact_No ,Purchase_Entry.Balance from New_Supplier,Purchase_Entry where New_Supplier.supplier_id = Purchase_Entry.supplier_id

и вернул мне то, что я хочу:

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Запрос может выглядеть как

    select supplier.Supplier_Name, supplier.Address, supplier.City, 
           supplier.Contact_No, purchase.Balance 
    from New_Supplier supplier 
    join Purchase_Entry purchase on supplier.supplier_id = purchase.supplier_id
    where purchase.supplier_id = @SupplierId

Я предлагаю использовать параметры , чтобы избежать Sql инъекции

cmd.SelectCommand.Parameters.Add("@SupplierId", SqlDbType.Int).Value = supplier_id ;

Вы также можете использовать ORM чтобы сопоставить запрос с объектом, например dapper

, потому что сопоставление с datatable с массивом немного огромно. Если вы измените запрос и порядок вашего выбора, могут отображаться неверные данные

0 голосов
/ 29 мая 2020

Я думаю, вы должны написать так

SqlDataAdapter cmd =new SqlDataAdapter(
                    "select 
                    New_Supplier.Supplier_Name,
                    New_Supplier.Address,
                    New_Supplier.City,
                    New_Supplier.Contact_No,
                    Purchase_Entry.Balance
                    from New_Supplier,Purchase_Entry 
                    where New_Supplier.supplier_id = Purchase_Entry.supplier_id
                    and New_Supplier.supplier_id='"+supplier_id +"'
                 ", con);

или

SqlDataAdapter cmd =new SqlDataAdapter(
                    "select 
                    New_Supplier.Supplier_Name,
                    New_Supplier.Address,
                    New_Supplier.City,
                    New_Supplier.Contact_No,
                    Purchase_Entry.Balance
                    from New_Supplier
                    inner join Purchase_Entry on New_Supplier.supplier_id = 
                    Purchase_Entry.supplier_id
                    where New_Supplier.supplier_id='"+supplier_id +"'
                 ", con);

, но лучше использовать параметр SQL вместо конкатенированной строки из-за SQL инъекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...