2010-11-24 17 views
1

私は簡単なデータベース関連のアプリケーションを開発しています。 GUIは、データグリッドビューと「保存」ボタンで構成されています。 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); 
      } 
     } 

問題は、私は

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

次の行に "CHAR" として記述してArguementExceptionを得ているである私は、に起因していると考えていますパラメータの1つがvarcharであり、他方が整数であるという事実。だから私はこれをやるの?

p.s.私はドットネットの初心者です&プログラミング。

+0

するための詳細情報 refferの値

は、サイズを提供したり、ちょうどちょうど@paraname?おそらくパーサーがそれに乗ってきて、cmd.Parameters.Addの '@ 'はオプションです。サイズ(0)を定義していない場合は –

答えて

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

こんにちは私はuがそれに0をprovindingているとして、あなたがデシベル値の大きさを提供していないと思います。あなたはS.Noにドットを `.`削除しようとしている http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.aspx

+0

を削除できます。デフォルトはmaxです。つまり、データベースに物事を保存するときに、アダプターは追加の長さ検査を行いません。それを0のままにしておくことは安全です –

関連する問題