Создание базы данных с использованием DataContext и System.Data.SQLite в C # - PullRequest
3 голосов
/ 27 февраля 2012

Я пишу простое приложение, собирающее информацию об оборудовании машины. Я планирую хранить данные в sqlite. Получил следующий код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.IO;
using System.Data;
using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace SQLiteTest
{
    public class MyDB : DataContext
    {
        public Table<Computer> kompy;
        public MyDB(string connection) : base(connection) { }
        public MyDB(IDbConnection connection) : base(connection) { }
    }


    [Table]
    public class Computer
    {
        [Column(IsPrimaryKey = true, CanBeNull = false)]
        public uint CompId;

        [Column]
        public uint CompanyId;

        [Column]
        public string CompName;
    }


    class Program
    {
        static void Main(string[] args)
        {
            string rootPath = Environment.CurrentDirectory;
            string dbPath = rootPath + "\\db.sqlite3";

            SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
            builder.Add("Data Source", dbPath);

            SQLiteConnection sqlcnn = new SQLiteConnection(builder.ConnectionString);
            MyDB db = new MyDB(sqlcnn);
            db.CreateDatabase();
            db.SubmitChanges();
            db.Dispose();            
        }
    }
}

Запуск этой программы вызывает исключение:

Unhandled Exception: System.Data.SQLite.SQLiteException: SQLite error
near "DATABASE": syntax error
   at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQ
LiteStatement previous, UInt32 timeoutMS, String& strRemain)
   at System.Data.SQLite.SQLiteCommand.BuildNextCommand()
   at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
   at System.Data.SQLite.SQLiteDataReader.NextResult()
   at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavi
or behave)
   at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteCommand(String command)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider
.CreateDatabase()
   at System.Data.Linq.DataContext.CreateDatabase()
   at SQLiteTest.Program.Main(String[] args) in C:\Users\bootch\documents\visual
 studio 2010\Projects\SQLiteTest\SQLiteTest\Program.cs:line 47

1) Почему этот код не работает, что мне не хватает?

2) Есть ли способ получить текстовую версию базовой команды sql, чтобы увидеть, что не так

3) Если база данных не существует, я хочу создать базу данных и все таблицы. Я ленивый, поэтому я подумал, что могу использовать типы, которые я создал для выполнения запросов. Возможно ли это с System.Data.SQLite?

Заранее спасибо, за комментарии и ответы!

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Похоже, вы пытаетесь использовать Linq2Sql с Sqlite, который не поддерживается по умолчанию (поддерживаются только SQL Server и SQL Server CE), см. этот вопрос для получения более подробной информации

Взгляните на использование Entity Framework , которое вместо этого поддерживает Sqlite.

0 голосов
/ 18 марта 2015

Я только что прошел через это и попытался реализовать.Получил ту же ошибку, затем обнаружил, что мы можем создать базу данных, используя SQLiteConnection следующим образом:

sqlcnn.CreateFile("MyDatabase.sqlite");

И затем, используя «db», вы можете выполнить все операции с базой данных.Попробуй.

...