SQLite记录更新突然不好使了,求解。

CrazyDak 2011-02-23 11:56:44
使用sqlite存入了一些数据,突然就不好使了,代码没变,数据库(就几个比较简单的表)重建了一次,重建是通过原来的数据库到处sql文件(导出的**.SQL文件),然后通过sql文件直接生成的一个新库。

自从换了新库,就不好使了,更新时提示“违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。”
代码如下:
 SQLiteConnection conn = new SQLiteConnection("Data Source =" + DB_PATH + "");
try
{
conn.Open();
SQLiteDataAdapter dataadapter1 = new SQLiteDataAdapter("Select * From " + tableName + " where id=" + prjID, conn);
DataSet dataset1 = new DataSet();
dataadapter1.Fill(dataset1, tableName);
DataRow datarow1;
datarow1 = dataset1.Tables[tableName].Rows[0];

//表进行更新
datarow1["name"] = prjName;
datarow1["mark"] = prjMark;
datarow1["size"] = prjSize;
datarow1["path_dlg"] = dlgPath;
datarow1["path_dom"] = domPath;
datarow1["path_dem"] = demPath;
datarow1["date_create"] = DateTime.Now.ToString();
datarow1["path_mxd"] = mxdPath
SQLiteCommandBuilder cb = new SQLiteCommandBuilder(dataadapter1);
dataadapter1.Update(dataset1, tableName);//就是这一句,到这就报错!

小弟刚学编程没多久,菜鸟一个,请各位大侠多多帮助,不胜感激。
...全文
554 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
woai5354 2012-03-05
  • 打赏
  • 举报
回复
我也碰到了,老说数据行不唯一
iihero_ 2011-02-26
  • 打赏
  • 举报
回复
楼主不如换一种思路,不用dataadapter, 直接使用parameter binding, create command自己来处理更新。
CrazyDak 2011-02-25
  • 打赏
  • 举报
回复
还请大侠们帮忙看看,挨个调试后依然不行。
CrazyDak 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwb 的回复:]

一个一个字段地调试,看看问题出在什么地方
[/Quote]
一个一个字段调试了,每个字段都没问题,然后单独写了一个控制台程序,更新代码还是源码,结果就成功了。在项目中,从程序启动后,只要有数据库操作,每次访问后立刻就关闭了,而且不存在同时读写的行为。用年前的代码版本,运行时还是可以更新成功的,年后做了一些修改这个地方就运行不起来了,不知道哪些改动造成这样的问题,数据库结构没动,数据库更新的代码一直也没动。
控制台程序如下:
 SQLiteConnection conn = new SQLiteConnection("Data Source =" + ms  + "");
try
{
conn.Open();
SQLiteDataAdapter dataadapter1 = new SQLiteDataAdapter("Select * From " + tableName + " where id=" + 4048, conn);
DataSet dataset1 = new DataSet();
dataadapter1.Fill(dataset1, tableName);
DataRow datarow1;
datarow1 = dataset1.Tables[tableName].Rows[0];
datarow1["name"] = "prjName";
datarow1["mark"] = "prjMark";
datarow1["size"] = "1000";
datarow1["path_dlg"] = "dlgPath";
datarow1["path_dom"] = "domPath";
datarow1["path_dem"] = "demPath";
datarow1["name_files"] = "files";
datarow1["path_mxd"] = "mxdPath";
datarow1["date_create"] = DateTime.Now.ToString();
SQLiteCommandBuilder cb = new SQLiteCommandBuilder(dataadapter1);
dataadapter1.Update(dataset1, tableName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示");
}
finally
{
conn.Close();
}
wwwwb 2011-02-24
  • 打赏
  • 举报
回复
一个一个字段地调试,看看问题出在什么地方
CrazyDak 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwb 的回复:]

有主键吗?重复?
[/Quote]
CREATE TABLE [ProjectInfo_t] (
[id] integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
[name] CHAR NOT NULL,
[path_dlg] VARCHAR,
[path_dom] VARCHAR,
[path_dem] VARCHAR,
[path_mxd] VARCHAR,
[date_create] TIMESTAMP NOT NULL,
[name_files] VARCHAR,
[size] INTEGER,
[mark] VARCHAR);
这是建表的SQL脚本,程序中更新赋值的都是字符串,date_create是用DateTime.Now.ToString()赋值的,我换成ISO标准也不行,即DateTime.Now.ToString("s")。而且原始值和更新至都不为空的情况下也失败,
CrazyDak 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]

先用SQLITE3的命令行工具试一下,然后再到你的程序中测试。
[/Quote]
用SQL语句可以更新。只是有一个问题,更新语句中我用datetime('now','localtime')更新当前时间,数据库中显示为“3911-03-24 09:45:51.”
时间格式选用的是TIMESTAMP
wwwwb 2011-02-24
  • 打赏
  • 举报
回复
是自增?
检查一下字段类型与变量类型是否一致
CrazyDak 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwb 的回复:]

有主键吗?重复?
[/Quote]
primary key? 有的
wwwwb 2011-02-24
  • 打赏
  • 举报
回复
有主键吗?重复?
ACMAIN_CHM 2011-02-24
  • 打赏
  • 举报
回复
先用SQLITE3的命令行工具试一下,然后再到你的程序中测试。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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