LINQPad在C#查询中创建sqlite数据库

时间:2011-11-17 02:04:13

标签: sqlite linqpad

LINQPad的IQ Connection插件允许用户使用SQLite,其复选框为“如果丢失则创建数据库”,但只会创建一个空文件。无论如何,当文件不存在时自动构建表吗?

是否应该有办法获取DataContext并使用该接口创建表?希望能让LINQPad同时更新其DataContext。

我到目前为止能做的最好的事情就是下面,在删除sqlite文件后创建DbCommands并在第一次运行时执行它们,然后我必须刷新数据库,然后再次运行它。

void Main()
{
    if (!File.Exists(this.Connection.ConnectionString.Split('=')[1]))
    {
        "CREATING DATABASE TABLES".Dump();
        CREATE_TABLES();
    }
    else
    {
        "RUNNING CODE".Dump();
        //Code goes here...
    }
}

public void CREATE_TABLES()
{
    this.Connection.Open();
    System.Data.Common.DbCommand sup = this.Connection.CreateCommand();
    sup.CommandText = @"create table MainTable
(
    MainTableID INTEGER not null PRIMARY KEY AUTOINCREMENT,
    FileName nvarchar(500) not null
)";
    sup.ExecuteNonQuery();
    sup.CommandText = @"create table SubTable
(
    SubTableID int not null,
    MainTableID int not null,
    Count int not null,
    primary key (SubTableID, MainTableID),
    FOREIGN KEY(MainTableID) REFERENCES MainTable(MainTableID)
)";
    //Apparently this version of sqlite doesn't support foreign keys really
    sup.ExecuteNonQuery();
    this.Connection.Close();
}

1 个答案:

答案 0 :(得分:2)

只需将查询语言下拉列表设置为“SQL”,键入DDL并按F5键。例如:

PRAGMA foreign_keys = ON
GO

create table Customer
(
    ID int not null primary key,
    Name nvarchar(30) not null
)
GO

create table Purchase
(
    ID int not null primary key,
    CustomerID int null references Customer (ID),
    Date datetime not null,
    Description varchar(30) not null,
    Price decimal not null
)

(注意创建外键约束的语法。)

完成后,右键单击Schema Explorer中的连接,然后选择“刷新”。然后,您可以将查询语言切换回 C#表达式 C#语句,并以适当的查询语言开始查询:)