Получение «Многошаговая операция вызвала ошибки. Проверьте каждое значение статуса ». ошибка при использовании ADO с SQL server 2008

Мы находимся в процессе миграции нашего блока SQL 2000 на SQL 2008. Но мы столкнулись с проблемой; когда набор результатов (строки или нет) возвращается с помощью запроса, имеющего UNION. Позже в коде мы пытаемся добавить новую строку и присвоить ей поле, но, поскольку использовалось UNION, когда мы пытаемся присвоить значение полю, это дает нам многоэтапную операцию, сгенерированную ошибками. Проверьте каждое значение статуса. ошибка. Мы попробовали следующий код на 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();
}
7
задан vocero 7 November 2011 в 18:03
поделиться