首页 > 解决方案 > c# Access DB 运行多个查询

问题描述

对所有 c# 的东西都非常陌生,但是已经构建了一个可以完成这项工作的程序,所以我对我的编码很满意,因为它基本上可以满足我的要求。我的问题是,如果表格匹配 3 个组合框(即选择横幅、商店和年份,网格将填充),我目前在按钮单击时显示 datagridview。现在我想填充第二个 datagridview,它是从另一个表中提取的,该表引用了 grid#1 中特定列(第 4 列)中的所有单元格(总共 10 个),我一辈子都想不通!基本上将他的第二个表与 grid1 上第 4 列中的值进行对比。下面是我用来填充第一个网格的

        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...如果有帮助,我还在为我的表使用访问数据库...如果使用我的级联下拉框,则在第一个 gridview 中我最终会查询该表是否包含该商店并且今年填充数据网格...工作正常并显示 7 列和我需要的 10 行...在第 4 列中有部门编号与相应下一列中的美元....我想运行第二个数据网格,我可以在其中询问“表是否包含不同的商店(由不同的组合框选择),同年但仅返回第一个网格中包含的部门(第 4 列, 10 行)”。如果我只想返回 1 行,我可以用部门编号填充一个文本框并添加 'where DEPT LIKE '"+textbox1.text+" ' - 这行得通 - 但我需要所有 10 个部门#。如果这听起来令人困惑,我很抱歉,因为我什至不知道如何提出这个问题。

作为一种解决方法,我在同一连接中创建了多个数据适配器并使用相同的数据表...从第一个 DGV 中提取信息以用作针对单独数据库的查询并填充第二个 DGV 我使用了类似的东西(无代码在我面前) Select * from DB where Dept like '"+datagridview1.rows[0].cells[4].value.tostring()+"' 它非常适合我的使用...

标签: c#

解决方案


听起来您对原始问题有解决方法。@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


推荐阅读