2012-05-09 8 views
0

を挿入または置換してください。sqlite Sagite insertまたはreplaceコマンドについては、C#

私は挿入物ifが存在しません。 挿入/更新された値は、データテーブルにバインドされたdatagridviewから取得されます。 データテーブルには、主キーであるTID列があります。 Tname、TUtilityなどの他の列もあります。

更新ステートメントの場合TIDには値があり、うまくいきます。しかし、insertステートメントの場合、シリアル番号(TID列)を自動的に入力します。

  private void SaveData(DataGridView dgv) 
      { 
       using (SQLiteConnection conn = new SQLiteConnection(connString)) 
       { 

        conn.Open(); 
        dt = dt.GetChanges(); 
        if (dt.Rows.Count > 0) 
        { 
         int dtlength = dt.Rows.Count; 
         DataRow[] arr = new DataRow[dtlength]; 

         dt.Rows.CopyTo(arr, 0); 
         SQLiteCommand upCmd = new SQLiteCommand(
     @"INSERT OR REPLACE 
    INTO 
     [Table1](
     [TID], 
     [TName], 
     [TUtility], 
     [TType])values(@TID,@Tname,@TUtility,@TType),conn); 
     for (int i = 0; i < arr.Length; i++) 
         { 
          upCmd.Parameters.AddWithValue("@TID", Convert.ToInt32(arr[i]["SNo"])); 
          upCmd.Parameters.AddWithValue("@TName", arr[i]["Utility"].ToString()); 
          upCmd.Parameters.AddWithValue("@TUtility", arr[i]["Plantname"].ToString()); 
          upCmd.Parameters.AddWithValue("@TType", arr[i]["PlantType"].ToString()) 
          da.UpdateCommand = upCmd; 

          this.da.UpdateCommand.ExecuteNonQuery(); 
         } 

は、どのように私は、ユーザーが新しい行を挿入すると、それは自動的にシリアル番号を入れなければならないような方法で、このTID値を追加する必要があります。 意味:現在DGVに4つのローがあるとします。 DGVは編集モードです(*)。新しい行を追加しています。ユーザーが新しい行に何らかのデータを入力しようとすると、既に入力されたシリアル番号があるはずです。

は私はあなたの問題を理解していますが、INSERT行う際に、なぜちょうどTIDにNULLを入れない場合はわからないあなたに 日

答えて

1

ありがとうございます。 TIDは主キーなので、sqliteは自動的に値を挿入します。あなたがテーブルのその列にNULLを挿入するたびに

Sqlite FAQによれば、主キー

のためにこれを言う、NULLは 自動的に 最大値より1大きい整数に変換され、テーブル内の他のすべての行にその列、または テーブルが空の場合は1です。

関連する問題