“Data Source cannot be empty. Use :memory: to open an in-memory database" 的意思是什么?

12

我最近将我的SQL Server数据库转换为SQLite数据库。但是当我尝试使用.Open()打开我的SQLite时,它抛出以下错误:

Data Source cannot be empty.  Use :memory: to open an in-memory database

编辑:添加连接字符串:

ConnectionString = @"Data Source=D:\XXX.db;Version=3";
connection = new SQLiteConnection(connectionString);
connection.Open();

为什么我会收到这个错误?我将同一个 SQL Server 数据库转换为 SQL CE 和 mySQL,但是却没有收到这些错误。


1
请将连接字符串放在问题中。 - Preet Sangha
ConnectionString = @"Data Source= D:\XXX.db;Version=3;connection = new SQLiteConnection(connectionString); connection.Open();"连接字符串 = @"数据源= D:\XXX.db;版本=3;连接 = new SQLiteConnection(连接字符串); 连接.Open();" - Verve Innovation
在编程中,等号后面的空格是否有意义? 数据源= D:\XXX.db - Preet Sangha
抱歉,大家,这是我的错误。在一个地方我将“datasource”写成了没有空格的方式,导致了问题。谢谢。 - Verve Innovation
4个回答

13

你的数据源后面有一个空格:Data Source= D:\XXX.db。另外,在你的复制粘贴中,连接字符串没有闭合引号。这是我用于测试工具的可用连接字符串:

@"Data Source=C:\Temp\Test.db3;Pooling=true;FailIfMissing=false;Version=3"

谢谢,伙计。我已经弄清楚了,你可以在我的问题下面的评论中看到。 - Verve Innovation

3

最近我尝试使用SQLite的内存版时遇到了相同的错误。

我是按照以下方式设置连接的:

var connection = new SQLiteConnection("Filename=:memory:");
connection.Open();

出现错误:

数据源不能为空。使用 :memory: 打开内存数据库。

我将代码更改为以下形式,注意 'SQL' 部分不再大写:

var connection = new SqliteConnection("Filename=:memory:");
connection.Open();

现在它可以工作了。

工作的不带大写字母版本来自于 Microsoft.Data.Sqlite.SqliteConnection 命名空间,而 SQLite 版本来自于 System.Data.SQLite.SQLiteConnection(我引用的是版本1.0.113.6)。


1

您没有提供数据源名称,也就是 SQLite 文件所在的位置。


我已经提到了我的其他评论。 - Verve Innovation

0

因为您的数据源为空。在打开Sqlite数据库之前,将数据源参数添加到连接字符串中。


不是空的。我已经指定了准确的路径,伙计。。 connectionString = @"Data Source= D:\XXX.db;Version=3; connection = new SQLiteConnection(connectionString); connection.Open(); - Verve Innovation
也许从 D:\ 前面移除空格并用双引号关闭 connectionString 可能会有所帮助。 - tidwall
抱歉各位,这是我的错误。在一个地方我没有加空格就写成了“datasource”,导致了问题。谢谢。 - Verve Innovation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接