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