C# 用OLEDB 连接修改Paradox表时 提示“操作必须使用一个可更新的查询”错误? 是不是因为Paradox 带了密码的原因啊?还是字段是中文的原因?
代码:
string sql=@"Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=1FF;Data Source=C:\db;Extended Properties=Paradox 5.x";
sqlConn.ConnectionString=sql ;
if(sqlConn.State==ConnectionState.Closed)
{
sqlConn.Open();
}
string Dvv="update 代码库 set 名称='1' where 编码 ='0001003'"
OleDbCommand myCommand = new OleDbCommand(Dvv , sqlConn);
myCommand.ExecuteNonQuery();//报错:操作必须使用一个可更新的查询
sqlConn.Close();
代码:
string sql=@"Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=1FF;Data Source=C:\db;Extended Properties=Paradox 5.x";
sqlConn.ConnectionString=sql ;
if(sqlConn.State==ConnectionState.Closed)
{
sqlConn.Open();
}
string Dvv="update 代码库 set 名称='1' where 编码 ='0001003'"
OleDbCommand myCommand = new OleDbCommand(Dvv , sqlConn);
myCommand.ExecuteNonQuery();//报错:操作必须使用一个可更新的查询
sqlConn.Close();
解决方案 »
- C# 调用 MFC dll 问题
- request.getresponse出现404页面不存在错误
- 奇怪的问题:页面内容显示不出来
- 前辈们请指点:菜鸟首次做项目,问下数据访问层与当前界面交互问题
- 关于邮件发送返回结果问题
- 请问c#里哪个函数的功能象 VBScript 的 split,ubound 函数来分割字符串的??
- 使用Invoke修改活动目录的用户时出错
- 如何让用户程序一直保持兴奋?
- 如何判断返回的DataView值为空??谢谢
- mvc 一定要用ling to sql吗
- WeifenLuo.WinFormsUI.DockContent这个控件在用的时候发现经常死机,怎么解决的?(求高人指点,有没有相同经历的朋友?)
- 我想问一下,枚举中有相同的值,访问时有什么规则,内有代码.
写保护:OFF;
保护:ON PASSWORD:1FF
[Microsoft][ODBC Microsoft Access 97 Driver] Operation must use an
updateable query.
或者是:
Microsoft JET Database Engine (0x80004005)
操作必须使用一个可更新的查询。 原因:
有几个主要的错误原因:
这个错误发生在当你的程序试图执行更新数据库或其它类似操作时。这是因为
ADO由于以下的几个原因而不能够写数据库造成的。 1。一般的原因都是匿名用户帐号(IUSR_MACHINE)对该数据库文件没有写权限。
要解决这个问题,在管理器中调整数据库文件的属性,让匿名用户有正确的权限。
当使用ACCESS数据库时,不仅要给文件写的权限,还要给该目录写的权限,因为
Jet需要在该目录建立一个.ldb文件[NTFS硬盘格式才会出现,FAT格式的不会出现权限问题]。
或是在IIS中设置一个有读取写入权限的匿名帐户.2。第二个原因是数据库没有使用正确的模式打开。3。还有可能是在ODBC管理器中将该DSN的只读选项选中。 4。你是在同时更新两个表中的字段,也会出现这个错误信息,解决办法是分开来更新
这两个表中各自字段。 5。当你使用了一个从低版本中(如ACCESS2.0,ACCESS7.0)载入到高版本(ACCESS 2000)
中的查询时,在执行这个查询是会出现该错误。 如果是winXP系统
在文件夹选项里面默认使用简单共享(推荐),把这个选项去掉,
再在文件夹上右键点击,就会出现安全这个选项卡,
原来默认的没有,然后在安全选项卡里面可以设置用户的写入权限了
右击数据库>安全>everyone>将需要的勾上
其中 表名:temp ;字段类型都是 文本型。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace SUN
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
if (UpdateNote() == true)
label1.Text = "True ";
else
label1.Text = "False" ;
} public Boolean UpdateNote()
{
Boolean tempvalue = false;
string sqlstr = ""; //当时在这里定义,是为了在出现异常的时候看看我的SQL语句是否正确
try
{
//用到了我前面写的那个得到数据库连接的函数
OleDbConnection conn = getConn(); //getConn():得到连接对象,
conn.Open(); //确定我们需要执行的SQL语句,本处是UPDATE语句!
sqlstr = "UPDATE temp SET c1='Sun' where a1='5'";
//定义command对象,并执行相应的SQL语句
OleDbCommand myCommand = new OleDbCommand(sqlstr, conn);
myCommand.ExecuteNonQuery(); //执行SELECT的时候我们是用的ExecuteReader()
conn.Close();
//假如执行成功,则,返回TRUE,否则,返回FALSE
tempvalue = true;
return (tempvalue);
}
catch (Exception e)
{
throw (new Exception("数据库更新出错:" + sqlstr + "\r" + e.Message));
}
} public OleDbConnection getConn()
{
//string connstr = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=F:\\web\\notesbook\\class\\leavenotes.mdb";
string connstr = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=D:\\ZWK V4.1.0001_T45M_S\\TEST\\SetParameter\\SetParameter\\bin\\Debug\\parameter.mdb";
OleDbConnection tempconn = new OleDbConnection(connstr);
return (tempconn);
} }
}
If neither Jet 4.0 SP5 or a later version nor the BDE is installed, the following are true: • Microsoft Access does not prompt for, use, or maintain Paradox indexes as in earlier versions of Microsoft Access. If Jet 4.0 SP5 or a later version or the BDE is installed, Access uses and maintains the indexes.
• APPEND, UPDATE, and DELETE are no longer supported.
• You can continue bulk writing of data to Paradox tables by using the INSERT INTO ... SELECT ... FROM ... syntax. However, the indexes are no longer maintained.
string sql=@"Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=1FF;Data Source=C:\db;Extended Properties=Paradox 5.x"; 大哥,你是用Access数据库吧?? 怎么又用sqlConn.ConnectionString=sql ;
if(sqlConn.State==ConnectionState.Closed)
{
sqlConn.Open();
}
1.这里的Sql 是什么?别名?,希望是这样, 看看这里有没有错,.
2.打开项目,数据库所在的文件夹,是权限的问题..给它权限..就行了. 给它多点权限,就行(上次我也是这样的)..
3.Database Password=1FF;Data Source=C:\db 这个路径有点问题吧?? 你再看看.
我想应该不是目录权限问题,我给目录everyone 所以权限了;
http://support.microsoft.com/kb/q175168/4. 最后一个问题和替代方法适用于所有 SQL 数据源。违反数据库的引用完整性的 SQL 语句可以导致出现此错误。下面是一些最常见的失败的查询:
• 其中最简单的一组查询是以下您无法更改的查询:UniqueValue 属性设置为 Yes 的交叉表查询、SQL 传递查询、联合查询或更新(即生成表)操作查询。
• 另一种非常常见的原因是联接包含的链接 ODBC 表的索引不是唯一的。在这种情况下,SQL 无法保证表中的记录是唯一,该表中字段的值将随查询发生更改。
• 有一种原因确实有可靠的替代方法。如果您尝试更新“一对多”查询的“一”方的联接字段,操作将会失败,除非您启用级联更新。因为这样您就可以将引用完整性委托给 JET 引擎。
参考代码string ConnectionString = @"Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=C:\Paradox;Dbq=C:\Paradox;CollatingSequence=ASCII;PWD=;";
using (System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(ConnectionString))
{
conn.Open();
using (System.Data.Odbc.OdbcCommand command = conn.CreateCommand())
{
command.CommandText = " update test set aa=14";
command.ExecuteNonQuery();
command.CommandText = "select * from test";
Console.WriteLine(command.ExecuteScalar());
}
}
看来要么是我连接数据库字符串问题,或者就是paradox数据库的结构的问题了。 麻烦大家再给我看看我的字符串连接语句。string sql=@"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Jet OLEDB:Database Password=1F;Data Source=C:\db\;Mode=ReadWrite;Extended Properties=Paradox 7.x";