C#操作ACCESS不能更新

落单枫叶 2014-09-01 10:50:32
问题很奇怪,试了N种方法,就是无法成功。
VS2013,ACCESS2013。简单做了一个表,两个字段,其中一个主键。
1、能读取数据,说明连接应该没问题,这些数据在ACCESS中输入。
2、更新操作(包括插入、更新)返回函数成功,基表就是不更新,没变化。
3、程序应该没问题,也试了好多方法,包括抄了人家的。
4、比如说,因为有一个主键,所以,不能重复,不重复输入时,函数返回成功,重复时,函数返回不成功,这也正常,但成功是表面的,表却始终不更新。

 private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = null;
string strConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\xkzDB.mdb";
conn = new OleDbConnection(strConnection);
string sql = string.Format("insert into xkzb (Id,xklxID) values ('{0}', '{1}')", this.idTextBox.Text,this.xklxIDTextBox.Text);
OleDbCommand cmd = new OleDbCommand(sql, conn);
conn.Open();
try
{
int rowCount = cmd.ExecuteNonQuery();
if (rowCount == 1)
{

MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("添加失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch
{
MessageBox.Show("添加失败!请检查是否输入数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
conn.Close();


难道上面的程序有错?
也试过:

private void button1_Click(object sender, EventArgs e)
{
DataRow drx = this.dataSet1.Tables[0].NewRow();
drx["Id"] = this.idTextBox.Text;
drx["xklxID"] = this.xklxIDTextBox.Text;
this.dataSet1.Tables[0].Rows.Add(drx);
this.xkzbTableAdapter.Update(this.dataSet1);
}

使用了数据集,应该也没问题吧?
那么,还有什么原因呢?
感觉上,在内存中,数据操作什么的都没问题,就是更新基表时,出了问题,却不知是什么原因?
唉,苦恼很久了!帮忙解惑的给大分!
...全文
553 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦克萝卜丝 2016-12-16
  • 打赏
  • 举报
回复
太感谢了,这个问题也困扰了我很久很久。 一开始以为自己的代码写错了。左查右查查不出。
qq_25775707 2016-05-13
  • 打赏
  • 举报
回复
楼主,请问你实现了更新操作么?求代码
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
改了之后连接没问题,问题依旧。
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
连接字符串中 Provider=Microsoft.Jet.OLEDB.4.0; 替换成Provider=Microsoft.ACE.OLEDB.12.0;试试呢?
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
是用的第一种,查看文件什么的我都注意了,因为程序退出再进去,添加或修改的数据还是没变化,还是只有前五行,也只有这五行。用ACCESS打开也一样。
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
实在没辙,难道要让我回到VFP了?VFP数据库表实在不安全啊!
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
还是用第一种方法插入一次,你要到项目所在的Bin\debug\目录下去检查数据库文件。
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
加不加单引号都一样,函数返回成功,基表没变化。 修改catch 因为本身它没返回错误,所以catch不到,只有故意输入了重复了 Id,它才会指出错误,这个错误是常规错误,因为我们知道它就是输入了重复的键。但是,基表并没更新,却报告成功或者那个常规错误,就是这个情况。
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
本身给出的反馈信息就准确。 改为 本身给出的反馈信息就不准确。
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
其实我原来就怀疑是这个,所以我让你直接打开数据库查看。 原先你肯定不是运行项目后马上打开数据库文件查看的,而是再次运行项目查看的,再次运行项目时发生了复制。 我刚才试验过,复制后数据库的最后修改时间不变,还是原来版本的修改时间。而你却说修改时间变了,。 本身给出的反馈信息就准确。
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
找到原因了,ACCESS数据库项目设置了“始终复制”,因而产生了问题,每次都回到原来的项目里的数据库。现在设置为“如果较新则复制”,问题就解决了。第一次用VS和C#,经验不足啊!谢谢大家回复。 发现原因很偶然,在没有打开VS的时候,直接运行了DEBUG下面生成的程序,结果竟然真的成功了,数据插入修改都顺利,心情也不错。
於黾 2014-09-02
  • 打赏
  • 举报
回复
ACCESS并不比其他数据库更安全. 既然你查询没有问题,用程序查询一下试试看
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
看来没人遇到这样的问题。
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
办公室和家里两台台式电脑,现在用的笔记本,win7 win8,32位64位都有,都是这种情况,但是都是一个VS2013光盘装的。装了ACCESS,当然可以打开mdb文件了。最近看了一下LightSwich,好有趣,那里有 caninsert,canupdate,candelete,难道C#也要这样?
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
你是怎么看里面内容的?直接双击mdb文件?好奇怪的问题哦
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
什么?最后更新时间变了但打开看还是没变?那可能是系统引擎有问题,而不是我上面说的还原的问题了。
落单枫叶 2014-09-02
  • 打赏
  • 举报
回复
如你所愿,修改时间是变了,连接未关闭前
“插入数据后,数据库文件被原来的版本还原覆盖了”我想最有可能了,那这又是怎么回事呢?
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
我怀疑你插入数据后,数据库文件被原来的版本还原覆盖了。
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
引用 11 楼 luwq168 的回复:
在sql server中,程序很正常。因为是桌面应用程序,不可能为客户装sql server吧,就是sql server compact,它没有存储过程和视图,感觉很不好。如果ACCESS能行,最好,不行的话,VFP就向我招手了。
sql server Compact 4.0绝对比access强,你也可以用sqlite的。
dalmeeme 2014-09-02
  • 打赏
  • 举报
回复
在插入数据前后分别检查mdb文件的最后修改日期,看是否文件被修改过。如果被修改过但打开数据库还是没更新,那我只好说邪门了。
加载更多回复(5)

110,533

社区成员

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

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

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