Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法强制转换类型为';System.Data.DataColumn';输入';System.IConvertible';_C#_Ado.net - Fatal编程技术网

C# 无法强制转换类型为';System.Data.DataColumn';输入';System.IConvertible';

C# 无法强制转换类型为';System.Data.DataColumn';输入';System.IConvertible';,c#,ado.net,C#,Ado.net,我试图将查询中的记录保存到数据行,但没有成功。我需要一些帮助。这是我的代码: private DataSet CreateDataSet() { DataSet ds = new DataSet(); // create Countries table and columns DataTable dtApplications = ds.Tables.Add("Applications"); DataColumn dtApplicationID = dtAppli

我试图将查询中的记录保存到
数据行
,但没有成功。我需要一些帮助。这是我的代码:

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);
}

您可以直接使用
DataAdapter

在我看来,上述代码的其余部分是多余的

旁注:之所以出现异常,是因为您希望将记录的字段传递给DataRow的字段。但实际上您正在传递
数据列

这将起作用,但不必要:

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

当您尝试使用哪种代码时,
sdr
是您的
DataReader

?您应该使用第一种方法,使用
DataAdapter.Fill(DataTable)
。然后我不理解您的编译器显示“(ApplicationID)”。我的
da.Fill(dt)不包含
应用程序ID
row["ApplicationID"] = sdr.GetInt32(sdr.GetOrdinal("ApplicationID"));
row["ApplicationName"] = sdr.GetString(sdr.GetOrdinal("ApplicationName"));