voc*_*ero 7 sql-server ado sql-server-2008
我们正在将SQL 2000框迁移到SQL 2008.但是我们遇到了一个问题.当使用具有UNION的查询返回结果集(行或不)时.稍后在代码中我们尝试添加一个新行并为其分配字段,但由于使用了UNION,当我们尝试为字段赋值时,它会给我们一个Multiple-step operation generated errors. Check each status value.错误.我们在Windows XP和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();
}
Run Code Online (Sandbox Code Playgroud)
下面的链接是一个文章,它给出了可能出现此错误消息的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
希望它可以帮助其他可能面临同样问题的人.
由于我发布了这个问题,我们发现问题是当你进行联合时,字段上的属性没有绑定(即属性:basecatalog,basetable和basecolumn为空)来解决我们的问题,我们不得不强制这些属性,通过将记录集保存到xml(adPersistXML),更改xml并从xml重新打开记录集.这反弹了领域,我们能够继续.我们知道这可能不是最有效的解决方案,但它适用于较旧的应用程序,我们不想重写sql语句.看起来主要错误Multiple-step operation generated errors. Check each status value.与将值分配给字段时发生错误的时间有关.
| 归档时间: |
|
| 查看次数: |
59882 次 |
| 最近记录: |