ASP.Net:DataTable不是通过引用传递给函数的
本文关键字:引用 函数 Net DataTable ASP | 更新日期: 2023-09-27 18:29:14
我正试图编写一个应用程序,该应用程序必须处理多个DataTables,并为每个DataTables多次查询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)。
我对任何网络编程都很陌生,所以这种行为让我很困惑。有人知道这段代码出了什么问题吗?
这可能是因为下面的代码块正在创建一个新的数据表。您的方法签名为QueryExec(string Query, DataTable Table, bool append = false)
,并且您正在调用QueryExec(Query, OrderList)
。因此,变量append = false
以及下面的代码块最终创建了一个新的DataTable实例。
if (!append)
Table = new DataTable();
您的方法必须返回DataTable,因为在您的方法中,您没有发送对DataTable 的引用
protected DataTable 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();
return Table;
}
如果您想将指针传递给您的对象,也可以使用ref
:
protected void QueryExec(string Query,ref 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();
}