C# SQLITE 多線程獲取Datatable報錯

monon2 2016-08-09 04:31:30
public SQLiteConnection conn = new SQLiteConnection();
public SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();
public DbTransaction trans;
public void Initialize(string FileName)
{
connstr.DataSource = FileName;
if (conn.ConnectionString != connstr.ToString())
{
conn.Close();
}
if (conn.State != ConnectionState.Open)
{
conn.ConnectionString = connstr.ToString();
conn.Open();
}
}
public DataTable OpenDataTable(string Sql, string TName)
{
DataTable TT = new DataTable(TName);
try
{
if (TName == "")
{
return TT;
}
SQLiteCommand Com = new SQLiteCommand(Sql);
Com.Connection = conn;
SQLiteDataAdapter Adp = new SQLiteDataAdapter(Com);
TT.RemotingFormat = SerializationFormat.Binary;
TT.CaseSensitive = true;
//Adp.FillSchema(TT, SchemaType.Source);
Adp.Fill(TT);//此處報錯
Com.Dispose();
Adp.Dispose();
}
catch (System.Exception ex)
{
}
return TT;
}

C#採用多線程調用OpenDataTable會報錯
1.Connection was closed, statement was terminated
2.library routine called out of sequence null connection or database handle
...全文
500 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
monon2 2016-08-11
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
[quote=引用 4 楼 monon2 的回复:] [quote=引用 3 楼 q646926099 的回复:] 两个线程,,,切换的很快,连接已经关闭了。
每個線程單獨連接的數據庫,連接的是同一數據庫[/quote] 你这个思维方式,纠结外道而不深入一点点去抽象建模理解知识,很容易产生分裂。就好像小孩子发现自己的舌头能尝五味,就幼稚地纠结于自己到底是不是长着5个小舌头。这时候就需要提高抽象认识水平,知道程序运行存在着的多个 Dbconnection 对象,而不是仅仅知道“连接的数据库”。[/quote] 每個方法單獨去連接SQLITE就可以訪問了,謝謝
  • 打赏
  • 举报
回复
引用 4 楼 monon2 的回复:
[quote=引用 3 楼 q646926099 的回复:] 两个线程,,,切换的很快,连接已经关闭了。
每個線程單獨連接的數據庫,連接的是同一數據庫[/quote] 你这个思维方式,纠结外道而不深入一点点去抽象建模理解知识,很容易产生分裂。就好像小孩子发现自己的舌头能尝五味,就幼稚地纠结于自己到底是不是长着5个小舌头。这时候就需要提高抽象认识水平,知道程序运行存在着的多个 Dbconnection 对象,而不是仅仅知道“连接的数据库”。
  • 打赏
  • 举报
回复
引用 2 楼 monon2 的回复:
網上說SQLite讀取可以多線程並發,為啥我就用不了
跟具体的数据库系统无关,就算是换成 SQL Server 你的代码也会出错。
connstr = new SQLiteConnectionStringBuilder()
这条语句应该放到 OpenDataTable 方法中,每一个方法有自己私有的 DbConnection。那种“共享”的想法反而是成事不足的。
秋的红果实 2016-08-10
  • 打赏
  • 举报
回复
SQLite是可以并行,但是,你的两个线程,有没有考虑线程安全问题,要是两个线程同时访问OpenDataTable方法,就会有问题 用委托实现多线程就不用自己考虑线程安全
为轮子而生 2016-08-10
  • 打赏
  • 举报
回复
用lock试一下
monon2 2016-08-09
  • 打赏
  • 举报
回复
引用 3 楼 q646926099 的回复:
两个线程,,,切换的很快,连接已经关闭了。
每個線程單獨連接的數據庫,連接的是同一數據庫
xiaoqiu_net 2016-08-09
  • 打赏
  • 举报
回复
两个线程,,,切换的很快,连接已经关闭了。
monon2 2016-08-09
  • 打赏
  • 举报
回复
網上說SQLite讀取可以多線程並發,為啥我就用不了
monon2 2016-08-09
  • 打赏
  • 举报
回复
自己頂下。。。。。 for循環調用1000次都沒有問題,兩個多線程訪問就出錯

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧