【发布时间】:2016-01-06 14:17:01
【问题描述】:
我正在尝试编写一个应用程序,该应用程序必须处理多个数据表并为每个数据表多次查询 SQL 服务器。我最终创建了这个函数:
protected void QueryExec(string Query, DataTable Table, bool append = false) {
if (!append)
Table = new DataTable();
SqlConnection Connector = new SqlConnection(/*connection data here*/);
SqlCommand Command = new SqlCommand(Query, Connector);
Connector.Open();
SqlDataAdapter Adapter = new SqlDataAdapter(Command);
Adapter.Fill(Table);
Connector.Close();
}
为了避免每次都写同样的东西。但是,现在我正在尝试实际运行代码,我遇到了一个问题。如果我在页面加载/按钮按下期间执行以下功能:
protected void OrderListGrab() {
var Query = "query";
QueryExec(Query, OrderList);
MainGridView.AllowPaging = true;
MainGridView.DataSource = OrderList;
MainGridView.DataBind();
MainGridView.Font.Size = 9;
}
我最终得到一个空数据表。但是,如果我替换这一行:
QueryExec(Query, OrderList);
有了这个:
SqlConnection Connector = new SqlConnection(/*connection data here*/);
SqlCommand Command = new SqlCommand(Query, Connector);
Connector.Open();
SqlDataAdapter Adapter = new SqlDataAdapter(Command);
Adapter.Fill(OrderList);
Connector.Close();
然后一切正常,数据在我的 DataTable 中(可以看到它被放入 DataGridView 并正确导出到 Excel)。
我对任何网络编程都很陌生,所以这种行为让我很困惑。有人知道这段代码有什么问题吗?
【问题讨论】:
-
如果需要,您可以使用
ref,但我会从方法中返回此DataTable。所以将其重命名为GetDataTable并将void更改为DataTable。但是您不应该将查询字符串传递给方法,这将是一个 sql 注入漏洞。而是为每个任务提供有意义的方法,例如GetUsers并使用 sql 参数。只将值传递给方法。 -
@TimSchmelter 这种方式确实有效,谢谢 :) 对于漏洞提示,我也没有考虑过使用这种方法的影响。
标签: c# sql asp.net sql-server datatable