sql-server – 获取“多步操作生成的错误.检查每个状态值.“使用ADO与SQL Server 2008时出错

我们正在将sql 2000框迁移到sql 2008.但是我们遇到了一个问题.当使用具有UNION的查询返回结果集(行或不是)时.稍后在代码中我们尝试添加一个新行并为其分配字段,但由于使用了UNION,当我们尝试为字段分配值时,它为我们提供了多步操作生成错误.检查每个状态值.错误.我们在 Windows XP和 Windows上尝试了以下代码. Windows 7并得到了相同的结果.但是当我们更改连接字符串以指向我们的sql 2000框时,我们不再会遇到该错误.

以下示例显示了我们遇到的问题.

var c = new ADODB.Connection();
var cmd = new ADODB.Command();
var rs = new ADODB.Recordset();
object recordsAffected;

c.Open("Provider=sqlOLEDB;Server=*****;Database=*****;User Id=*****;Password=*****;");

cmd.ActiveConnection = c;
cmd.CommandType = ADODB.CommandTypeEnum.adCmdText;
cmd.CommandText = "create table testing2008 (id int)";
cmd.Execute(out recordsAffected);

try {
    cmd.CommandText = "select * from testing2008 union select * from testing2008";

    rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
    rs.Open(cmd,Type.Missing,ADODB.CursorTypeEnum.adOpenDynamic,ADODB.LockTypeEnum.adLockBatchOptimistic,-1);

    rs.AddNew();
    rs.Fields["id"].Value = 0; //throws exception
    rs.Save();
}
catch (Exception ex) {
    MessageBox.Show(ex.ToString());
}
finally {
    cmd.CommandText = "drop table testing2008";
    cmd.Execute(out recordsAffected);
    c.Close();
}

解决方法

下面的链接是一个文章,它给出了可能出现此错误消息的6种方案的详细信息:

方案1 – 尝试将数据插入数据库时​​发生错误

方案2 – 尝试打开ADO连接时发生错误

场景3 – 将数据插入Access时出错,其中fieldname具有空格

场景4 – 使用adLockBatchOptimistic时,将数据插入Access时出错

场景5 – 使用Jet.OLEDB.3.51或ODBC驱动程序(不是Jet.OLEDB.4.0)时,将数据插入Access时出错

方案6 – 使用Command对象和Parameters时发生错误

http://www.adopenstatic.com/faq/80040e21.asp

希望它可以帮助可能面临同样问题的其他人.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03