2017-05-06 74 views
-1

您好我是新的C#和我有一个窗口与一个文本框Barcode_txtBx和按钮Search_btn其过滤中的记录数据表dt到一个记录和具有另一种文本框Manufacturer_txtBx来显示数据表形成列制造商。我可以做过滤,但我找不到在文本框Manufacturer_txtBx中显示相关列的方法。这是迄今为止的代码。文本框显示值从接入

private void Search_btn_Click(object sender, EventArgs e) 
{ 
     connection.Open(); 
     OleDbCommand command = new OleDbCommand(); 
     command.Connection = connection; 
     command.CommandText = "Select * from BookInTable where Barcode = '" + Barcode_txtBx.Text + "'"; 
     OleDbDataReader reader = command.ExecuteReader(); 
     DataTable dt = new DataTable(); 
     dt.Load(reader);   
     Manufacturer_txtBx.Text = ""; 
     connection.Close(); 
} 

目前Manufacturer_txtBx正在显示一个空字符串,这样我没有得到一个错误

+0

'DataTable'通常意味着结果中有多行,但我假设你只有一行。我建议你看一下DataTable的MSDN文档,它是Rows属性。另外,如果你只是希望单行的制造商考虑'SELECT'而不是'*',那么执行'ExecuteScalar'而不是'ExecuteReader'。 – Crowcoder

+2

此外,您可以广泛开放SQL注入。你知道如果有人将其输入条形码盒会发生什么? :'123';从[BookInTable]中删除; --'。你可以通过[参数化你的查询]来缓解这个问题。(http://stackoverflow.com/questions/14376473/what-are-good-ways-to-prevent-sql-injection) – Crowcoder

+0

数据库最初有多个记录,但只有一个在DataTable过滤后,实际相关数据输出到5个不同的文本框(Manaufaturer,Type,Model,PartNumber和AdditionalNotes)。但为了方便,我只专注于一个。我刚刚在学习C#的时候,在我中风后工作不适,现实只是为了让我的大脑忙碌起来,提高我的认知能力。所以这个数据库永远不会被使用。我会认为在文本框中输入掩码将会阻止SQL注入,但我现在还没有尝试过。 –

回答

0

这工作,将数据添加到文本框

 private void Search_btn_Click(object sender, EventArgs e) 
    { 
     connection.Open(); 

     OleDbCommand command = new OleDbCommand(); 
     command.Connection = connection; 
     command.CommandText = "Select * from BookInTable where Barcode = '" + Barcode_txtBx.Text + "'"; 
     OleDbDataReader reader = command.ExecuteReader(); 

     DataTable dt = new DataTable(); 

     dt.Load(reader); 
     string data = dt.ToString(); 

     Manufacturer_txtBx.Text = dt.Rows[0].ItemArray[5].ToString(); 
     Type_txtBx.Text = dt.Rows[0].ItemArray[6].ToString(); 
     Model_txtBx.Text = dt.Rows[0].ItemArray[7].ToString(); 
     PartNumber_txtBx.Text = dt.Rows[0].ItemArray[8].ToString(); 
     AdditionalDetails_txtBx.Text = dt.Rows[0].ItemArray[13].ToString(); 
     connection.Close(); 

    } 

Crowcoder和史蒂夫是正确的这没有以任何方式消毒,任何工作数据库都应该如此。