【问题标题】:Trying to receive information from database: "Value cannot be null. Parameter name: dataTable"尝试从数据库接收信息:“值不能为空。参数名称:dataTable”
【发布时间】:2015-05-22 10:58:44
【问题描述】:

如何将我的信息从 db 接收到 DataTable

DataTable 报错:“Value cannot be null. Parameter name: dataTable”

public partial class _Default : System.Web.UI.Page
{  
    private DataTable dataTable;
    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(connString);
        string query = "select * from tbl_news";

        SqlConnection conn = new SqlConnection(connString);
        SqlCommand cmd = new SqlCommand(query, conn);
        conn.Open();


        SqlDataAdapter da = new SqlDataAdapter(cmd);

        da.Fill(dataTable);
        conn.Close();
        da.Dispose();
    }
}

【问题讨论】:

  • 它只是我的鳕鱼,我第一次使用这个查询

标签: c# asp.net


【解决方案1】:

它告诉你先实例化DataTable

您可以在第一次定义它时执行此操作,或者在方法本身中执行此操作...只需在尝试填充它之前将其设为。

dataTable = new DataTable();
da.Fill(dataTable);

不幸的是,如果DataTablenulldocumentation 并没有说明它的作用。如果它在尝试填充之前检查 null 并对其进行实例化,那就太好了。

我深入研究了程序集,其中肯定有代码检查null,如果是则抛出ArgumentNullException。代码分布在多种方法中,但归结为:

if (dataTables == null)
{
    throw new ArgumentNullException("dataTable");
}

【讨论】:

    【解决方案2】:

    异常信息:

    "值不能为空。参数名称:dataTable"

    告诉你DataTablenull,不能是null。您无法填写不存在的表格。它是一个ArgumentNullException,通常从方法中抛出,以确保所需传递的参数不是null

    要修复它,您只需初始化表。

    protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dataTable = new DataTable();
        using (var conn = new SqlConnection(connString))
        using (var cmd = new SqlCommand("select * from tbl_news", conn))
        using (var da = new SqlDataAdapter(cmd))
        {
            // no need to open the connection with DataAdapter.Fill
            da.Fill(dataTable);
        } // no need to close the connection with using-statement anyway
    
        // do something with the table here, f.e. assign it as datasource 
        // for a webdatabound control like GridView
        // ...
    }
    

    文档没有明确提到这个异常,你可以找到in the source

    为什么您不需要打开/关闭与Fill 的连接:

    与 SELECT 语句关联的连接对象必须是 有效,但不需要打开。如果连接关闭 在调用 Fill 之前,打开它以检索数据,然后关闭它。如果 在调用 Fill 之前连接是打开的,它保持打开状态。

    【讨论】:

      【解决方案3】:

      先这样初始化数据表

           DataTable dataTable = new DataTable();
      

      然后填写

          da.fill(dataTable);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-26
        • 2016-01-16
        • 2014-05-17
        • 2016-05-14
        • 2015-11-05
        • 2019-05-26
        • 2014-10-29
        相关资源
        最近更新 更多