【问题标题】:c# Access DB running multiple queriesc# Access DB 运行多个查询
【发布时间】:2018-11-10 05:25:42
【问题描述】:

对所有 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,我正在尝试通过引用第一个数据网格视图中的值来填充第二个数据网格视图...如果有帮助,我还在为我的表使用访问数据库...如果使用我的第一个网格视图,则在第一个网格视图中级联下拉框我最终会得到一个查询,询问表是否包含这个商店,今年填充数据网格......工作正常并显示 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()+"' 它非常适合我的使用...

【问题讨论】:

  • 永远不要将数据和字符串粘合在一起来创建 SQL。始终使用 SQL 参数。总是
  • 你的问题我不清楚。您是否尝试通过参数化 grid1 的 col4 来填充 grid2 ?
  • 你试过什么?正如不满所说的那样;请使用参数!
  • 我已经编辑了我的原始帖子
  • 我想我想出了一个解决方法......请参阅我的原始帖子

标签: c#


【解决方案1】:

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

【讨论】:

  • 那些参数不应该用引号引起来。
  • @LarsTech 好电话。我没有意识到我把它们放在引号里。全部固定。
  • 感谢有关参数的建议...我必须做一些研究,因为我学会了使用引号,现在很困惑
  • 这可能看起来有点奇怪,但这只是一种将值添加到查询的方法,具有一定的抽象级别,而不仅仅是将它们内联。将@stores 视为您使用command.Parameters.AddWithValue 方法为其赋值的变量。
猜你喜欢
  • 2018-04-26
  • 1970-01-01
  • 2017-01-01
  • 2014-08-17
  • 1970-01-01
  • 2011-10-21
  • 2016-09-29
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多