2010-11-24 62 views
1

我正在開發一個簡單的數據庫相關的應用程序。 GUI由datagrid視圖和一個「保存」按鈕組成。 datagridview使用數據集作爲源。數據集依次通過從SQL Server Compact Edition數據庫文件中獲取數據進行填充。將datagridview的內容保存到數據庫的問題

問題是,當我使用datagridview更改數據庫的內容,然後繼續進行更改。

SqlCeDataAdapter da = new SqlCeDataAdapter(); 
da.UpdateCommand = Con.CreateCommand(); // Con is SqlCeCommand object 
da.UpdateCommand.CommandText = "update TempTable set " + 
"S.No = @S.No , Name = @Name"; 

this.AddParams(da.UpdateCommand, "S.No", "Name"); 
da.Update(ds); // ds is the dataset used as source by the datagridview 

和AddParams方法...

private void AddParams(SqlCeCommand cmd, params string[] cols) 
     { 
      foreach (string col in cols) 
      { 
       cmd.Parameters.Add("@" + col, SqlDbType.Char, 0, col); 
      } 
     } 

問題是我在下面一行得到一個ArguementException與描述爲 「字符」

cmd.Parameters.Add("@" + col, SqlDbType.Char, 0, col); 

我相信是由於其中一個參數是varchar而另一個是整數的事實。那麼我怎麼做到這一點?

p.s.我是Dot Net的初學者&編程。

+0

你嘗試過在S.No取出點`.`?也許解析器會隨着它跳過,而cmd.Parameters.Add中的`@`是可選的,如果你沒有定義大小(0),則可以將其移除 – 2011-01-02 17:27:57

回答

0

如果它只是導致了問題的類型,你可以定義這樣每列一個單獨的類型:

Dictionary<string, SqlDbType> columnDefinition = new Dictionary<string, SqlDbType>() 
{ 
    { "S.No", SqlDbType.YourType }, 
    { "Name", SqlDbType.OtherType } 
}; 

private void AddParams(SqlCeCommand cmd, params string[] cols) 
{ 
    foreach(string col in cols) 
    { 
     cmd.Parameters.Add("@" + col, columnDefinition[ col ], 0, col); 
    } 
} 
相關問題