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 时不将 NULL 设置为 TID。由于 TID 是主键,sqlite 会自动插入值。

根据Sqlite FAQ它说这是主键

每当您在表的该列中插入 NULL 时,NULL 都会自动转换为一个整数,该整数比该列在表中所有其他行的最大值大 1,如果表为空,则为 1。

于 2012-05-10T06:18:34.970 回答