Сохранение изменений в наборе данных в базу данных sqlite - PullRequest
0 голосов
/ 22 ноября 2010

Я новичок в 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 записи в таблице прямо сейчас

1 Ответ

0 голосов
/ 22 ноября 2010

Будьте проще. Просто используйте объект SQLite Command. Установите значение sql

Вставить в таблицу (col1, col2, col3) VALUES (@ val1, @ val2, @ val3)

Затем передайте значения в коллекцию параметров объекта команды. Таким образом, вам будет проще отлаживать, так как вы можете посмотреть на каждое значение параметра во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...