sql-server – 获取“多步操作生成的错误.检查每个状态值.“使用
发布时间:2020-12-12 06:45:27 所属栏目:MsSql教程 来源:网络整理
导读:我们正在将SQL 2000框迁移到SQL 2008.但是我们遇到了一个问题.当使用具有UNION的查询返回结果集(行或不是)时.稍后在代码中我们尝试添加一个新行并为其分配字段,但由于使用了UNION,当我们尝试为字段分配值时,它为我们提供了多步操作生成的错误.检查每个状态值.
我们正在将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 希望它可以帮助可能面临同样问题的其他人. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |