2011-11-07 52 views
4

我們正在將我們的SQL 2000框遷移到SQL 2008.但我們遇到了一個問題;當通過使用具有UNION的查詢返回結果集(行或不)時。在後面的代碼中,我們嘗試添加一個新行併爲其指定字段,但由於使用了UNION,因此當我們嘗試爲字段賦值時,它會給我們一個Multiple-step operation generated errors. Check each status value.錯誤。我們在Windows XP & Windows 7上嘗試了以下代碼,得到了相同的結果。但是,當我們將連接字符串更改爲指向我們的SQL 2000框時,我們不會再出現這個錯誤。獲取「多步驟操作產生的錯誤,檢查每個狀態值。」 ADO與SQL服務器錯誤2008

以下示例顯示我們遇到的問題。

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

由於我發佈了這個問題,我們發現問題是當你做一個聯合的字段上的屬性沒有綁定(即屬性:basecatalog,basetable & basecolumn是空的),以彌補我們不得不通過將記錄集保存到xml(adPersistXML),強制這些屬性的值,更改xml並從xml重新打開記錄集。這反彈了領域,我們能夠繼續。我們知道這可能不是最有效的解決方案,但它是針對較舊的應用程序的,我們不想重寫sql語句。它看起來像主錯誤Multiple-step operation generated errors. Check each status value.是與當一個值被分配給一個字段時發生錯誤時有關。

3

我能想到的兩件事...確保您的「ID」列將接受零(0)。另外 - 我通過不使用adUseClient遊標(嘗試服務器)一次性阻止了此問題。

很多時候,這是一種類型不匹配,試圖將NULL填充到非空列中,或者嘗試將更多字符寫入列中而不是設計出來。

希望這會有所幫助。 - Freddo

+0

弗雷多,我知道這是一個古老的線索,但我想感謝你的迴應。我收到這個錯誤,不知道爲什麼。原來,這是因爲試圖寫出比我最初設置字段更多的字符。再次感謝。 – 2013-09-26 21:16:11

6

它是類型不匹配,儘量

rs.Fields["id"].Value = "0"; 

,或者確保您分配一個Variant的值。

8

下面的鏈路是製品,其給出的6個場景很大擊穿可能發生此錯誤消息:

方案1 - 嘗試將數據插入到數據庫

情景時,會發生錯誤2 -嘗試打開ADO連接時發生錯誤

場景3 -將數據插入Access時發生錯誤,其中字段名具有空格

方案4 -錯誤使用ADLOCKBATCHOPTIMISTIC

時,會發生將數據插入通道,

方案5 -錯誤發生將數據插入通道,使用Jet.OLEDB.3.51或ODBC驅動器(未Jet.OLEDB時0.4。0)

場景6 - 使用Command對象時出現錯誤和參數

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

希望它可以幫助其他人可能會面臨同樣的問題。發生在我身上

+0

解決我的問題!非常感謝@EdsonF! – WishKnew

0

同樣的問題,問題是,我違反了一個對象的屬性,在我的情況下,它是尺寸誤差來如

「IntegrationException:產生錯誤的問題(多步操作檢查每個狀態值。)」

Imports ADODB 
    Dim _RecordSet As Recordset 
    _rs.Fields.Append("Field_Name", DataTypeEnum.adVarChar, 50) 

    _Recordset("Field_Name").Value = _RecordDetails.Field_NameValue 

_RecordDetails.Field_NameValue長度超過50個字符,因此該屬性被侵犯,因此發生的錯誤。

0

我在嘗試插入/更新字段的值與表>字段類型不匹配時出現此錯誤。

例如,數據庫表>字段是

炭(1)

然而

,我試圖插入/更新

「蘋果」

成記錄。

一旦我將輸入值更改爲「a」並且它有效。

相關問題