Я новичок в ADO.NET.Я борюсь с постоянными изменениями в моем наборе данных в моей базе данных sqlite.
У него есть таблица "Категория", которая имеет 3 поля: CategoryID (int), CategoryName (varchar (100), Parent (int). Parentможет быть нулевым.
Я пытаюсь вставить новую строку в свою базу данных. У меня есть следующий код.
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 записи в таблице прямо сейчас