C#访问数据库运行多个查询

时间:2018-11-07 14:55:05

标签: c#

对于所有c#东西来说都是新手,但是已经构建了可以完成此工作的程序,因此我对自己的编码感到满意,因为它基本上可以完成我想要的工作。我的问题是,如果表格匹配3个组合框(即选择横幅,商店和年份,并且将填充网格),则当前我在按钮单击时显示一个datagridview。现在,我想填充第二个datagridview,它是从另一个表中提取的,该表引用了grid#1中特定列(第4列)中的所有单元格(总共10个),我一生都无法解决!基本上对照grid1第四列中的值检查第二张表。这是我用来填充第一个网格的

        OleDbDataAdapter da = new OleDbDataAdapter("select *from  
        ShortageAllYears_2 where Stores LIKE '"+cboStore_2.Text+"' and 
        YEARS LIKE '"+cboYear.Text+"'", conn);
        DataTable data = new DataTable();
        da.Fill(data);
        dataGridView2.DataSource = data;

是的Halil Ibrahim,我正在尝试通过引用第一个中的值来填充第二个datagridview ...如果有帮助的话,我也正在为我的表使用access databse ...如果使用my,则在第一个gridview中使用级联的下拉框,我将以查询的形式结束,询问该表是否包含此商店,并且今年填充了datagrid ...工作正常,并显示了我需要的10行的7列...在第4列中有部门编号在下一列中具有相应的美元。...我想运行第二个数据网格,在这里我可以问“表是否包含不同的商店(由不同的组合框选择),同一年但仅返回第一个网格中包含的部门(第4列,第10行)”。如果我只想返回1行,则可以用部门编号填充文本框,并添加'where DEPT LIKE'“ + textbox1.text +”'-可以,但是我需要所有10个部门编号。很抱歉,这听起来令人困惑,因为我什至不确定如何问这个问题。

作为一种解决方法,我在同一连接中创建了多个数据适配器,并使用相同的数据表...从第一个DGV中提取信息以用作对单独的数据库的查询,并填充第二个DGV,我使用了类似的方法(我前面没有代码)从DB所在的部门中选择*,例如'“ + datagridview1.rows [0] .cells [4] .value.tostring()+”',它非常适合我使用...

1 个答案:

答案 0 :(得分:0)

听起来您有一个解决原始问题的方法。 @Disaffected 1070452提出了一个非常好的观点。始终使用参数。要对您的查询执行此操作很简单。

SqlCommand command = conn.CreateCommand();
command.CommandText =  "select *from  ShortageAllYears_2 where Stores LIKE @stores and YEARS LIKE @years"
command.Parameters.AddWithValue("@stores, cboStores_2.Text);
command.Parameters.AddWithValue("@years, cboYear.Text);
var result = command.ExecuteReader();

此时,您可以对结果值进行任何所需的操作。我确定您可以使其适应OleDbDataAdapter的要求。不过,这就是我过去的实现方式。

使用SQL参数的原因多种多样,但最大的原因之一是SQL注入。如果只是将数据粘贴到语句中,则取决于输入数据的方式,您可能会打开使用Table Drop命令或获取敏感数据的Gets语句的语句。

这是一个很好的参考。 https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.parameters?view=netframework-4.7.2