2012-09-09 117 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)'的第一種方法。 –

相關問題