2010-11-24 88 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); 
    } 
} 
相关问题