2012-09-09 85 views
0

我试图将查询中的记录保存到DataRow中,但没有成功。我可能需要一些帮助。这是我的代码:无法将类型为'System.Data.DataColumn'的对象转换为键入'System.IConvertible'

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

回答

0

您可以直接使用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

+0

是的它的SqlDataReader –

+0

当我尝试你的代码有错误,编译器显示我(ApplicationID)! –

+0

当你尝试哪些代码?你应该使用'DataAdapter.Fill(DataTable)'的第一种方法。 –

相关问题