多步骤OLE DB操作生成错误。如有可能,请检查每个OLE DB状态值。未完成任何工作。

7
我正在运行以下代码。
/*Fetchinch Last CustID from custMaster*/
int ID = 0;
try
{
     con.Open();
     da = new OleDbDataAdapter("select max(Id) from custMaster",con);
     DataSet ds = new DataSet();
     da.Fill(ds);
     for(int i=0;i<ds.Tables[0].Rows.Count;i++)
        ID=int.Parse(ds.Tables[0].Rows[i][0].ToString());
     con.Close();
}
catch (Exception ex) {}
finally 
{
     con.Close();
}

我正在尝试在try块的第一条语句中放置调试器,并发现当我尝试打开连接时会出现错误。 错误文本:
“多步OLE DB操作生成了错误。如果可用,检查每个OLE DB状态值。没有完成任何工作。”
连接字符串是:
“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:\NewSoft\Database\TestApp.accdb;IntegratedSecurity=SSPI”
我正在使用oledb连接。

1
那个语句返回的是标量而不是数据表,对吗? - hcb
在 con.open() 之后出现了错误。 - Freelancer
4个回答

4

当我使用以下连接字符串打开连接时,遇到了类似的问题:

Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True

将连接字符串中的Integrated Security=True改为Integrated Security=SSPI可以解决这个问题。


OP已经在使用SSPI,所以这显然不能回答原始问题。相反,你提出了一个新问题并回答了它。 - Jeremy Caney

3
这可能是连接字符串错误的结果。您应该尝试添加:

Persist Security Info=True;

您可能会在注册表中与OLE DB提供程序遇到问题,必须具有OLEDB_SERVICES记录。在HKEY_CLASSES_ROOT\CLSID的注册表下,找到OLE DB提供程序的CLSID并添加以下注册表值:

Value Name: OLEDB_SERVICES
Data Type: REG_DWORD
Value: 0xFFFFFFFF

请参见http://support.microsoft.com/kb/269495了解更多信息。


你有任何想法我应该如何知道CLSID吗?我似乎找不到关于这个的任何信息(你的链接已过期) - Bassie
@Bassie 我搜索了“Microsoft KB 269495”,找到了这个链接,它似乎是引用的KB文档的存档版本。https://www.betaarchive.com/wiki/index.php/Microsoft_KB_Archive/269495 - Richard Chambers

1
我遇到了同样的问题,但发现是密码中使用了特殊字符。因此,我更改了Access文件密码,并将 Jet OLEDB:Database Password= 替换为更新后的密码,问题得以解决。

1

对于连接到 MS Access 数据库的类似问题,如果在连接属性 Jet OLEDB:Database Password= 中设置了错误密码,则会生成此精确错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接