我认为我的SQLite连接遇到数据库连接超时,但我不确定如何提高连接超时.可以使用ConnectionString.DefaultTimeout设置命令超时,但Connection.ConnectionTimout是只读的.有什么建议?
谢谢,Brian
我收到"System.Data.SQLite.SQLiteException:无法打开数据库文件." 当我尝试访问数据库以在我的程序"第一次"打开时保存记录.
这是事情,它在Visual Studio中本地调试时工作正常,但是当我在安装程序中打包程序时停止工作,然后在某处安装程序.
我猜测它是数据库的位置,我刚刚在没有路径的database.s3db中设置了它,因为它存储在程序的exe旁边,但是怎么会导致问题呢?
我很茫然,任何有关解决这个问题的进一步想法或建议都将不胜感激.
我目前正在使用下面的方法来获取最后插入的行的ID.
Database.ExecuteNonQuery(query, parameters);
//if another client/connection inserts a record at this time,
//could the line below return the incorrect row ID?
int fileid = Convert.ToInt32(Database.Scalar("SELECT last_insert_rowid()"));
return fileid;
Run Code Online (Sandbox Code Playgroud)
到目前为止,这种方法工作正常,但我不确定它是否完全可靠.
假设有两个客户端应用程序,每个应用程序都有自己独立的数据库连接,它们在同一时间调用上面的服务器端方法.请记住,客户端线程并行运行,并且SQLite一次只能运行一个操作(或者我听说过),一个客户端实例是否可以返回由插入的记录的行ID另一个例子?
最后,是否有更好的方法来获取最后插入的行ID?
我正在编写一个Entity Framework 4.1应用程序.在这个应用程序中,我有一个History类定义如下:
public class History
{
public Guid Id { get; set; }
public DateTime HistoryDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,当我查看数据库时,它似乎将日期存储为本地时间.我的公司不存在于一个时区,这会导致问题吗?还有什么我需要做的事情来将日期和时间存储为UTC,或者它是否已经在SQLite中存储为UTC,我只是在当地时间看到结果.以下是我看到的一些示例输出:
select id, historydate from history limit 1;
000846d3-f91d-47bb-9963-baf9530e0229|2004-10-28 16:57:00
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我在连接到我的sqlite数据库时遇到问题.该文件位于应用程序的文件夹中.这是连接字符串
string path = "Data Source=MY.db";
Run Code Online (Sandbox Code Playgroud)
如果我使用绝对路径,我可以让它工作,但如果我尝试使用相对路径,它会给我一个"找不到表"错误.有任何想法吗?
我正在使用Entite Framework 4.2 CF和SQLite,但是当我尝试启动应用程序时,我得到"提供程序不支持CreateDatabase"错误.这是我的模型映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
#region NewsMapping
modelBuilder.Entity<News>().ToTable("news");
modelBuilder.Entity<News>().HasKey(x => x.Id).Property(x => x.Id).HasColumnName("ID").HasColumnOrder(0);
modelBuilder.Entity<News>().Property(x => x.Status).HasColumnName("STATUS");
modelBuilder.Entity<News>().Property(x => x.NewsTitle).HasColumnName("NEWS_TITLE");
modelBuilder.Entity<News>().Property(x => x.Content).HasColumnName("CONTENT_1");
modelBuilder.Entity<News>().Property(x => x.IsImportant).HasColumnName("IS_IMPORTANT");
modelBuilder.Entity<News>().Property(x => x.OrderNumber).HasColumnName("ORDER_NUMBER");
modelBuilder.Entity<News>().Property(x => x.CreateDate).HasColumnName("CREATE_DATE");
#endregion
base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?
谢谢
sqlite system.data.sqlite ef-code-first entity-framework-4.1 asp.net-mvc-3
使用64位程序时System.Data.SQLite抛出以下EntryPointNotFoundException:
无法在DLL"SQLite.Interop.dll"中找到名为"sqlite3_changes_interop"的入口点.
奇怪的是,只有Foreign Keys=True在连接字符串中指定并且更重要的是仅在我显示之后才会出现FolderBrowserDialog.我正在浏览一个文件夹来显示要加载的数据库.
以下代码显示问题:
public Form1()
{
InitializeComponent();
// Exception below if this is displayed
using (var diag = new FolderBrowserDialog())
{
diag.ShowDialog(this);
}
var conn = new SQLiteConnection("data source=':memory:'");
conn.Open(); // Works fine
conn.Close();
// No exception below if displayed here instead
//using (var diag = new FolderBrowserDialog())
//{
// diag.ShowDialog(this);
//}
conn = new SQLiteConnection("data source=':memory:';foreign keys=True");
conn.Open(); // EntryPointNotFoundException thrown here
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
foreign keys=True如果未显示对话框,或者在打开任何其他SQLite连接后显示对话框,则打开连接可正常工作.如果程序作为32位进程运行,代码也可以正常工作.如果我使用单一混合模式x64 SQLite程序集或MSIL + x64互操作程序集,行为也是相同的.我正在使用v1.0.92.0所以这不是问题.
所以问题是为什么会显示 …
我正在使用EFCore SQLite,当使用Linq运行简单查询时,我注意到查询Take().Last()没有返回预期的内容,示例代码:
// There are more than 10000 rows in the table
DbSet<DataEntry> set = ctx.Set<DataEntry>();
// this should return the first 20 rows
var current = set.OrderBy(row => row.Id).Take(20);
// first entry is right
long tStart = current.First().Time;
// This should have returned the last entry in the first 20 entries, but instead, it returned the last entry of the entire data set
long tEnd = current.Last().Time;
// so essentially it looks like this:
set.Last().Time == set.Take(20).Last().Time …Run Code Online (Sandbox Code Playgroud) c# sqlite linq-to-entities system.data.sqlite entity-framework-core
我不太确定这是否是我使用的 SQLite 版本的问题。但实际上我没有直接使用本机 SQLite (dll),我使用的是System.Data.SQLite版本1.0.108.0,看起来这是我的应用程序针对的 .NET 4.5 的唯一版本(最新)。
所以我想知道那个版本是否System.Data.SQLite支持ON CONFLICT?
这只是基本查询ON CONFLICT:
INSERT INTO CUSTOMER(CUSTOMER_ID, CUSTOMER_NAME) VALUES('C1','N1')
ON CONFLICT(CUSTOMER_ID)
DO UPDATE SET CUSTOMER_NAME=excluded.CUSTOMER_NAME
Run Code Online (Sandbox Code Playgroud)
但它会抛出一个错误,如下所示:
靠近“ON”:语法错误:
请帮助执行以下查询:sqlite 查询以获取所有表名列表以及其中的记录数:
我想获取 Sqlite3 数据库中每个表的行数。我想避免写出手写查询。我可以获得这样的表列表:
SELECT name FROM sqlite_master WHERE type='table' 我想在子查询中使用它,如下所示:
select count (*) from (SELECT name FROM sqlite_master WHERE type='table'); 但只会返回子查询中的总行数,这不是我想要的。