【问题标题】:Unable to cast object of type 'System.Data.DataColumn' to type 'System.IConvertible'无法将“System.Data.DataColumn”类型的对象转换为“System.IConvertible”类型
【发布时间】:2012-09-09 19:04:12
【问题描述】:

我尝试将查询中的记录保存到DataRow,但没有成功。我可能需要一些帮助。这是我的代码:

private DataSet CreateDataSet()
{
    DataSet ds = new DataSet();

    // create Countries table and columns
    DataTable dtApplications = ds.Tables.Add("Applications");
    DataColumn dtApplicationID = dtApplications.Columns.Add("ApplicationID", typeof(int));
    DataColumn dtApplicationName= dtApplications.Columns.Add("ApplicationName", typeof(string));

    DataTable dt = new DataTable();
    SqlConnection con = new SqlConnection(MoahannedConnectionString);
    SqlCommand cmd1 = new SqlCommand("select AppID,AppName from Application", con);
    SqlDataAdapter da = new SqlDataAdapter();
    SqlDataReader sdr = null;
    dt.TableName = "Application";
    con.Open();
    sdr = cmd1.ExecuteReader();
    while (sdr.Read())
    {
       AddDataToTable(dtApplicationID, dtApplicationName, dtApplications, ds);
    }
}

private void AddDataToTable(DataColumn ID, DataColumn Name, DataTable myTable,DataSet ds)
{
    DataRow row;
    row = myTable.NewRow();
    row["ApplicationID"] = ID;
    row["ApplicationName"] = Name;
    myTable.Rows.Add(row);
}

【问题讨论】:

    标签: c# ado.net


    【解决方案1】:

    你可以直接使用DataAdapterload a DataTable

    using(var da = new SqlDataAdapter("select AppID,AppName from Application", con))
    {
        da.Fill(dt);
    }
    

    我认为上面的其余代码是多余的。

    旁注:您遇到异常是因为您想将记录的字段传递给 DataRow 的字段。但实际上你传递的是DataColumn

    这可行,但没有必要:

    row["ApplicationID"] = sdr.GetInt32(sdr.GetOrdinal("ApplicationID"));
    row["ApplicationName"] = sdr.GetString(sdr.GetOrdinal("ApplicationName"));
    

    sdr 是您的DataReader

    【讨论】:

    • 你什么时候试试哪个代码?您应该只使用DataAdapter.Fill(DataTable) 的第一种方法。
    • 那我不明白你的编译器显示“(ApplicationID)”。我的da.Fill(dt); 不包含ApplicationID
    猜你喜欢
    • 2015-12-17
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多