我是ADO.NET的新手。我正在努力将我的数据集中的持久更改保存到我的sqlite数据库。
它有一个表“Category”,它有3个字段:CategoryID(int),CategoryName(varchar(100),Parent(int).parent可以为null。
我正在尝试在我的数据库中插入一个新行。我有以下代码。
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 :(得分:0)
保持简单。只需使用SQLite Command对象即可。将sql设置为
插入tablename(col1,col2, col3)VALUES(@ val1,@ val2,@ val3)
然后将值传递给命令对象的参数集合。通过这种方式,您可以更轻松地进行调试,因为您可以在运行时查看每个参数值。