簡體   English   中英

在 C# 中使用 DataContext 和 System.Data.SQLite 創建數據庫

[英]Creating database using DataContext and System.Data.SQLite in C#

我正在編寫簡單的應用程序來收集有關機器硬件的信息。 我計划將數據存儲在 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 有可能嗎?

在此先感謝您的評論和回答!

看起來您正在嘗試將 Linq2Sql 與默認情況下不支持的 Sqlite 一起使用(僅支持 SQL 服務器和 SQL 服務器 CE),請參閱此問題了解更多詳細信息。

看看使用支持 Sqlite 的實體框架

我剛剛經歷了這個並試圖實施。 得到同樣的錯誤,然后發現我們可以使用SQLiteConnection創建數據庫,如下所示:

sqlcnn.CreateFile("MyDatabase.sqlite");

然后使用“db”你可以做所有的數據庫操作。 試試吧。

我發現這對我有用。

            string fileDB = "Data Source=:memory:";
            Console.WriteLine(fileDB);
            SQLiteConnection conn = new SQLiteConnection(fileDB);
            DataContext db = new DataContext(conn);
            Console.WriteLine(db.Connection.ServerVersion);

使用文件,將文件路徑歸功於此人

string fileDB = "Data Source=" + Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName +
                            @"\test.sqlite";

首先在這里查看Linq2SQL公司的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM