C#ADO连接修改Paradox表时的错误? 200分求答,UP有分。谢谢

musclecn 2007-12-06 04:21:36
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();
...全文
609 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyufei 2008-01-15
  • 打赏
  • 举报
回复
up
musclecn 2007-12-28
  • 打赏
  • 举报
回复
现在已经找到问题所在了,就是因为数据库有密码, 我把数据库密码清空后,更新1000条数据2秒结束,加上密码又是一条的操作不了。
看来要么是我连接数据库字符串问题,或者就是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";
musclecn 2007-12-28
  • 打赏
  • 举报
回复
自己顶下
musclecn 2007-12-27
  • 打赏
  • 举报
回复
现在我这个数据库db文件目录中已经有 px文件存在 已经有索引了;还是提示操作必须使用一个可更新的查询。我快晕倒了
jinjazz 2007-12-21
  • 打赏
  • 举报
回复
标准答案来了

用Delphi自带的Database Desktop工具打开db文件,编辑表,给某字段建立索引就可以了,会生成一个xxx.px索引文件

参考如下文档,其中4里面的第二条就是了
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());
}
}
cseek 2007-12-20
  • 打赏
  • 举报
回复
update [代码库] set [名称]='1' where [编码] ='0001003'"
icediamond 2007-12-20
  • 打赏
  • 举报
回复
把C:\db这个文件夹的写入权限开出来就可以了.这个问题和ACCESS的写入权限开启是一样的。
xiaojing7 2007-12-20
  • 打赏
  • 举报
回复
up
ouhou 2007-12-20
  • 打赏
  • 举报
回复
up
chxljtt 2007-12-20
  • 打赏
  • 举报
回复
UP
xiaoyaobihai 2007-12-20
  • 打赏
  • 举报
回复
UP
musclecn 2007-12-20
  • 打赏
  • 举报
回复
现在问题是这样的: 同目录下有2个 表,一个表没有密码 可以正常更新 添加; 还有一个带密码, 可以查询 但是不能修改 删除 添加操作;
我想应该不是目录权限问题,我给目录everyone 所以权限了;
waterine 2007-12-20
  • 打赏
  • 举报
回复
jf
zhangjjhua 2007-12-19
  • 打赏
  • 举报
回复
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";

大哥,你是用Access数据库吧??

怎么又用sqlConn.ConnectionString=sql ;
if(sqlConn.State==ConnectionState.Closed)
{
sqlConn.Open();
}
1.这里的Sql 是什么?别名?,希望是这样, 看看这里有没有错,.
2.打开项目,数据库所在的文件夹,是权限的问题..给它权限..就行了. 给它多点权限,就行(上次我也是这样的)..
3.Database Password=1FF;Data Source=C:\db 这个路径有点问题吧?? 你再看看.
musclecn 2007-12-19
  • 打赏
  • 举报
回复
自己顶下
musclecn 2007-12-17
  • 打赏
  • 举报
回复
微软说明如下:
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.
musclecn 2007-12-17
  • 打赏
  • 举报
回复
还是自己顶
musclecn 2007-12-12
  • 打赏
  • 举报
回复
更新语句是标准的sql语句啊
dba_1984 2007-12-10
  • 打赏
  • 举报
回复
我这段代码测试没有问题,不过数据库没有设置密码,你对比一下,看哪里可能出现了问题。
其中 表名: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);
}

}
}
hgs5945 2007-12-10
  • 打赏
  • 举报
回复
是不是更新语句有问题呀?你查下看
加载更多回复(40)

110,500

社区成员

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

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

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