2010-11-22 22 views
0

Je suis nouveau sur ADO.NET. Je suis aux prises avec des changements persistants dans mon ensemble de données à ma base de données sqlite.Modifications persistantes du jeu de données dans la base de données sqlite

Il a une table "Catégorie" qui a 3 champs:.. CategoryID (int), CategoryName (varchar (100), Parent (int) parent peut être nul

Je tente d'insérer une nouvelle ligne . dans ma base de données que j'ai le code suivant

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

Quand je l'exécute, je reçois une exception.

Category.Categoryname ne peut pas être NULL

. Pourquoi cette erreur arrive? Je ne pense pas que je l'insertion d'un nul

Aussi, quand j'allow nulls dans cette colonne particulière (changement fait dans la base de données), ce code insère une nouvelle ligne

(64, NULL, NULL

dans la base de données. J'ai déjà 63 enregistrements dans le tableau en ce moment

Répondre

0

Restez simple. Utilisez simplement un objet de commande SQLite. Réglez le sql être

Insérer dans tablename (col1, col2, col3) VALUES (@ val1, @ val2, @ val3)

passent ensuite les valeurs dans la collection de paramètres de la commande objet. De cette façon, vous aurez un temps de débogage plus facile, étant donné que vous pouvez regarder chaque valeur de paramètre à l'exécution.