2012-05-09 69 views
0

关于Sqlite插入或替换命令。sqlite插入或替换datagridview C#

我在做插入,如果不存在。 插入/更新的值来自绑定到数据表的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处于编辑模式(*),我正在添加一个新行。一旦用户试图在新行中输入一些数据,应该有一个序列号已经填充。

谢谢 孙

回答

1

我不知道如果我理解你的问题,但为什么不只是把空的TID当你插入。由于TID是主键,sqlite会自动插入值。

根据Sqlite FAQ它说这对于主键

每次插入一个NULL插入表中的该列中,NULL是 自动转换成整数比的 一个最大值大该列在表中的所有其他行上,或者如果 表为空,则为1。