c#向Access插入数据失败但不报错---很奇怪的现象

xo_knight 2008-09-21 01:53:42
各位大虾:

小的最近在做一个小型C#数据库应用程序,继上次sql语句语法错误之后,现在又出现了新的问题,下面我来详细描述一下:

(前提):我用Access作为我应用程序的数据库,在数据显示模块中没有出现异常,而且下拉框和datagridview等都能用select语句从数据库中读取数据进行数据绑 定,但当我想要插入一条新的记录的时候,cmd.ExecuteNonQuery()返回影响行数为一,但数据库中记录没有成功添加,整个过程没有任何异常,用调试中的sql语句直接在access中运行,却能插入数据.

后来我上网找了一下,有人说是access数据库权限问题,我就给数据库添加了密码,改了权限,改了连接字符串,还是能够进行查询,但插入还是无效,仍然没有报错.

我的插入sql语句为:insert into Stock (GoodsNum,CustomerName,GoodsName,SumCount,SumBoxCount,GoodsPrice,GoodsValue,ChargeMan,Remark) values('008','饭店','刀',2333,333,333,776889,'大声的','反倒是');

我的查询语句为:select GoodsNum as 序号,GoodsName as 产品名称,CustomerName as 进货厂名,GoodsCount as 件数,GoodsBoxCount as 箱数,GoodsPrice as 单价,GoodsSumValue as 总额,DealDate as 入库日期,ChargeMan as 经手人,Remark as 备注 from GoodsDeal where InOutFlag=0 order by DealDate desc", "GoodsDeal"


数据库的属性不是只读,而且我已经以共享模式打开了,请各位高手朋友指点一下,

先谢谢了
...全文
841 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
遇见你之后 2012-04-25
  • 打赏
  • 举报
回复
smtp.163.com
lsb45 2010-07-15
  • 打赏
  • 举报
回复
3.access数据库的权限
1)插入语句正确执行也通过就是不能成功插入数据,结果是数据库的权限设置不够。
2)主要的问题是我在解决方案中添加了一个类库Common用户数据库操作,当然连接数据库的方法Getconnection()也定义在
这个类库中,所以我就把access数据库FS.accdb放在了类库项目下的Data文件夹下,我编译执行没错,查询数据库也没错误,
当我执行插入命令时奇怪发生了。。。执行正确不报错误,但是Data文件夹下的数据库中就是没有新的数据,后来我
一步步的调试看到数据库连接语句时才大吃一惊:(原来连接到的是主项目下的Bin/Debug/Data/数据库名),我打开项目
文件夹,在Common文件夹中的Bin/Debug/Data/下发现了一个系统自动复制了一个FS.accdb,同时在主项目下的Bin/Debug/Data
中也有一个FS.accdb,我想可能是路劲冲突原因,造成两个数据库都没法写入。于是我将连接字符串改成
string oledbconnectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=./Data/FS.accdb;Persist Security Info=True";
直接指向了主项目下的Bin/Debug/Data/FS.accdb,插入就成功了。
这个原因可能是数据库没有直接放在界面层项目中的原因,而且在wpf程序中xml,access(现在只用了这两个)数据提供文件都
只能放在Bin文件夹下。老火哦...
zishanyan 2010-01-08
  • 打赏
  • 举报
回复
虽然是比较早的帖子,不过,最近在做VB.net的时候也遇到了类似问题,后来发现,问题是出在用DataGridView绑定Access的时候,系统会提示询问是否复制数据库文件到输出目录,如果点“是”的话,系统会把这个数据库文件复制到输出目录bin\debug中,那么在进行数据操作的时候实际上是在对bin\debug中的数据库文件进行的,而原库文件是不受影响。这时候要对原库文件也进行更新的话就需要另外的写代码来实现。
所以想要直接对原库文件进行操作的话,在跳出提示的时候点“否”就行了。

因为用的是日文的环境,跳出提示的时候只看了个大概,结果选了“是”就发现了这个问题。
赵老三 2009-09-15
  • 打赏
  • 举报
回复
我也遇到这个问题了,程序中是没有问题的,甚至在程序未关闭时还能就插入的字段读出来
但是数据库里就是没有添加,郁闷中
fcuandy 2008-09-21
  • 打赏
  • 举报
回复
没报错,查检你操作的access与你自己查看的access是不是同一个文件。
jankrong 2008-09-21
  • 打赏
  • 举报
回复
可能是Access数据库文件的读写权限的问题!

建议看一下该盘符文件系统是NTFS还是FAT/FAT32?

如果是NTFS的话,然后选中数据库右键开属性->安全->用户里的权限是否已经勾选“修改”与“写入”选项->如果没有的话请选中->确定!

然后试试看看!

如果是FAT/FAT32的话,进本上不存在以上问题,但要注意该文件的属性了,看看系统用户是否可以操作该文件。
dawugui 2008-09-21
  • 打赏
  • 举报
回复
SQL SERVER 和ACCESS的数据导入导出

常规的数据导入导出:

使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:

1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
2Services(数据转换服务),然后选择 czdImport Data(导入数据)。
3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。

Transact-SQL语句进行导入导出:

1.在SQL SERVER里查询access数据:
-- ======================================================
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名
-------------------------------------------------------------------------------------------------
2.将access导入SQL server
-- ======================================================
在SQL SERVER 里运行:
SELECT *
INTO newtable
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名
-------------------------------------------------------------------------------------------------
3.将SQL SERVER表里的数据插入到Access表中
-- ======================================================
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名
(列名1,列名2)
select 列名1,列名2 from sql表
实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\db.mdb';'admin';'', Test)
select id,name from Test
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)
SELECT *
FROM sqltablename
-------------------------------------------------------------------------------------------------
xo_knight 2008-09-21
  • 打赏
  • 举报
回复
我已经把trycatch都去掉了,一句异常处理的语句都没有,我就是想看看到底什么错,但它就是不报错,而且还返回影响行数为一,

关键的是我查询是没问题的,获取dataset 和dataReader都没问题,就是插不进去
fcuandy 2008-09-21
  • 打赏
  • 举报
回复
不是那个问题,如果说权限问题,那第通常是指ntfs权限问题。

点开 access 文件所在文件夹,右健属性》安全性》增加对 iusr_计算机名用户 或 everyone 的写权限即可。


但是你说程序没有报任何异常,这并不正常,代码中是否用了try catch,如果有,把它去掉,先看看报什么错再确定原因,否则就是无的放矢
duanzhi1984 2008-09-21
  • 打赏
  • 举报
回复
没碰到过,感觉挺奇怪的

语句看起来没什么问题,不过ACESS与SQL SERVER有点区别.

你先试着用语句:
insert into Stock (GoodsNum,CustomerName,GoodsName,SumCount,SumBoxCount,GoodsPrice,GoodsValue,ChargeMan,Remark) values('008','饭店','刀',2333,333,333,776889,'大声的','反倒是')
看是否会有记录.
xo_knight 2008-09-21
  • 打赏
  • 举报
回复
自己先顶一下,我以前也用过access做小程序的,不过那时候我的数据操作那部分不是我写的,不知道为什么我用就不行呢.
CN_SQL 2008-09-21
  • 打赏
  • 举报
回复

insert into Stock (GoodsNum,CustomerName,GoodsName,SumCount,SumBoxCount,GoodsPrice,GoodsValue,ChargeMan,Remark) values("008","饭店","刀",2333,333,333,776889,"大声的","反倒是")

我记得ACCESS,插入字符串用的双引号。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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