2010-11-22 44 views
0

我是ADO.NET的新手。我正在努力將我的數據集中的更改保存到我的sqlite數據庫中。在sqlite數據庫中持續更改數據集

它有一個表 「類別」 其中有3個字段:。類別ID(INT),類別名稱(VARCHAR(100),父母(INT),家長可以爲空

我試圖插入新行。到我的數據庫,我有以下代碼

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SQLite; 
using System.Text; 

namespace QS_Optimized 
{ 
    class UsingDataset 
    { 
     static DataSet dataset; 
     static SQLiteConnection conn; 

     static UsingDataset() 
     { 
      conn = new SQLiteConnection("data source = ..\\sqlitedb_amrit.db"); 
      dataset = new DataSet("MyDataset"); 
     } 

     public static void UpdateFromDB() 
     { 
      SQLiteDataAdapter sqda = new SQLiteDataAdapter("Select Category.* from Category where Parent = 0", conn); 
      sqda.Fill(dataset, "Category"); 
      //dataset.Tables["Category"].Columns["CategoryID"].AllowDBNull = false; 
      //dataset.Tables["Category"].Columns["CategoryName"].AllowDBNull = false; 

      // Insert command 
      SQLiteCommand cmdInsert = new SQLiteCommand(); 
      cmdInsert.Connection = conn; 
      cmdInsert.CommandText = @"Insert into Category('CategoryID','CategoryName','Parent') values" + 
       @"(@id,@name,@parent)"; 
      cmdInsert.Parameters.Add(new SQLiteParameter("@id",DbType.Int64)); 
      cmdInsert.Parameters.Add(new SQLiteParameter("@name",DbType.String)); 
      cmdInsert.Parameters.Add(new SQLiteParameter("@parent",DbType.Int64)); 
      sqda.InsertCommand = cmdInsert; 

      // Add Datarows to dataset; 
      DataTable tbl = dataset.Tables["Category"]; 
      DataRow drw = tbl.NewRow(); 
      drw[0] = 64; 
      drw[1] = "TestCategory"; 
      drw[2] = 0; 
      tbl.Rows.Add(drw); 

      sqda.Update(dataset,"Category"); 
     } 

     public static void Main() 
     { 
      UpdateFromDB();   
     }   
    } 
} 

當我執行它,我得到一個異常:

Category.Categoryname不能爲null

。 爲什麼會出現這個錯誤?我不認爲我插入一個空

此外,當我允許在特定列(改變數據庫中完成)零點,該代碼插入一個新行

(64,NULL,NULL )

進入數據庫中的表。我現在已經有63條記錄了

回答

0

保持簡單。只需使用SQLite Command對象。設置SQL是

插入到表名(COL1,COL2, COL3)VALUES(@ VAL1,@ val2的,@ VAL3)

然後將值傳遞到的參數集合的命令的目的。通過這種方式,您可以更輕鬆地進行調試,因爲您可以在運行時查看每個參數值。