2012-06-10 141 views
2

我有一個問題,即使經過數小時的調試後,我仍然無法找到解決方案。C#+ MySQL + ExecuteNonQuery在UPDATE上返回'1',但不在DB中更改

我有一個簡單的SQL命令,在C#代碼端執行SQL命令後,'ExecuteNonQuery()'執行後,我想用某個值更新一行(值約爲5mb的文本)返回'1'並且沒有例外,但是這些更改有時會反映在數據庫行中,有時不會。

我試着調試,看看是否將取代舊的值是正確的,他們是。我正在使用MySQL 5.5.11。

  • 難道這是MySQL的設置嗎?

失去了我對這個問題的看法,如果你有任何想法,將不勝感激。

EDIT,包括代碼:

的代碼是如此簡單:

cmd.CommandText = "UPDATE user SET data = @data WHERE id = @id"; 

然後我添加PARAMS到DbCommand對象的SQL查詢。 '數據'約爲5mb大。

此命令始終返回「1」,即使更改不會反映到數據庫中(有時它的工作原理,有時它does not):

cmd.ExecuteNonQuery(); 

提前感謝!

+2

發佈一些代碼,所以我們可以:1)看**,你在做什麼**,**和**怎麼你正在做的,和2),所以我們也許可以重現相同的問題。 – Arran

+1

我有類似的問題,我已經刪除了列並重新創建它。不要問我爲什麼,但它工作。MySql驅動程序在MS產品中存在一些問題。 – rcdmk

+0

您是否試圖用較短的文本更新該行? – eflles

回答

0

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

微軟.NET Framework數據提供程序的SQL Server不支持問號(?)佔位符傳遞參數的SQL語句或通過CommandType.Text命令調用的存儲過程。在這種情況下,必須使用命名參數。

例如:

SELECT * FROM Customers WHERE CustomerID = @CustomerID 

編輯: 只注意到這是MySQL的,雖然我不能很快找到任何simliar一下吧,我會建議你使用命名參數反正

+0

感謝您的回覆,但我從頭頂寫了代碼示例,實際上代碼使用@參數,我將編輯我的OP。 – Armkreuz

1

我不知道mysql提供程序是否使用autocommit?如果沒有,那麼你必須調用你可以通過連接對象上的BeginTransaction獲得的Transaction對象。

+0

感謝您的回覆,我不知道,但我不使用交易對象,所以我不知道爲什麼有時它的工作,有時不是? – Armkreuz

0

我有這個問題,它與自動提交有關。

問題:先前在應用程序生命週期自動提交在應用程序設置爲0,由另一個進程,但失敗了。與自動提交關閉的連接將被連接池重新使用。

這將導致這種類型的錯誤在不可預知的時間。

+0

請注意,即使不使用交易也會發生。沒有COMMIT,連接已被設置爲沒有提交。 –