0

Sqliteの挿入または置換コマンドについて。

存在しない場合は挿入を行っています。挿入/更新された値は、データテーブルにバインドされたdatagridviewから取得されます。データテーブルには、主キーであるTID列があります。Tname、TUtility...などの他の列もあります。

更新ステートメントの場合、TIDには値があり、適切に機能します。ただし、挿入ステートメントの場合、シリアル番号(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は編集モード(*)です。新しい行を追加しています。ユーザーが新しい行にデータを入力しようとすると、シリアル番号がすでに入力されているはずです。

ありがとうサン

4

1 に答える 1

1

問題を理解しているかどうかはわかりませんが、INSERT を実行するときに TID に NULL を入れないのはなぜですか。TID は主キーであるため、sqlite は自動的に値を挿入します。

Sqlite FAQによると、主キーに対してこれを言う

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

于 2012-05-10T06:18:34.970 に答える