ASP.Net:DataTable没有通过引用函数传递?

时间:2016-01-06 14:17:02

标签: c# sql asp.net sql-server datatable

我试图编写一个必须兼顾多个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)。

我对任何网络编程都很陌生,所以这种行为对我来说非常令人费解。有人知道这段代码有什么问题吗?

2 个答案:

答案 0 :(得分:1)

这可能是因为您正在创建新数据表的下面的代码块。您的方法签名QueryExec(string Query, DataTable Table, bool append = false),而您正在调用QueryExec(Query, OrderList)。因此,变量append = false以及下面的代码块最终会创建一个新的DataTable实例。

    if (!append)
        Table = new DataTable();

答案 1 :(得分:0)

您的方法必须返回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();
}