2010-11-22 8 views
0

Ich bin neu in ADO.NET. Ich habe mit ständigen Änderungen in meinem Datensatz zu meiner SQLite-Datenbank zu kämpfen.Persistente Änderungen in Datensatz zu SQLite-Datenbank

Es hat eine Tabelle "Kategorie", die drei Felder haben:.. CategoryID (int), Kategorie (varchar (100), Eltern (int) Mutter null seine

ich eine neue Zeile einzufügen versuchen . in meiner Datenbank ich habe den folgenden Code

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();   
     }   
    } 
} 

Als ich es ausführen, ich eine Ausnahme erhalten.

Category.Categoryname nicht NULL sein kann

. Warum kommt dieser Fehler? Ich glaube nicht, ich bin ein null

Auch das Einfügen, wenn ich nulls in dieser bestimmten Spalte ermöglichen (Änderung der Datenbank durchgeführt), fügt dieser Code eine neue Zeile

(64, NULL, NULL)

in die Tabelle in der Datenbank. Ich habe bereits 63 Datensätze in der Tabelle jetzt

Antwort

0

Halten Sie es einfach. Verwenden Sie einfach ein SQLite-Befehlsobjekt. Legen Sie die SQL-

Insert into Tabellenname (col1, col2, col3) VALUES (@ val1, @ val2 @ val3)

dann die Werte in die Parameter-Auflistung des Befehls übergeben werden Objekt. Auf diese Weise haben Sie eine einfachere Zeit zum Debuggen, da Sie sich jeden Parameterwert zur Laufzeit ansehen können.