簡體   English   中英

ExecuteScalar返回null或DBNull(開發或生產服務器)

[英]ExecuteScalar returns null or DBNull (development or production server)

我正在嘗試在C#中的現有DataRow中添加一列。 之后,該列將填充我的數據庫中的單個值。

DataRow dr已存在且列“COLNAME”也存在。
comTBP是我的SqlCommand

dr["COLNAME"] = Convert.ToInt32(comTBP.ExecuteScalar());

如果我的數據庫中有值,並且ExecuteScalar()可以獲得該值,則一切正常。 如果我在我的開發服務器(本地)上測試此代碼,如果ExecuteScalar()返回null或DBNull並且我的新列的值為0,它也可以工作。但是如果我將代碼部署到生產服務器,則會出現問題。 如果我做同樣的事情,使用相同的數據庫,它會拋出一個異常,並顯示一條消息,它無法將DBNull轉換為Int32。
我的問題是為什么這個錯誤出現在生產服務器上而不是我的本地開發服務器上?

ExecuteScalarquery返回DBNull以獲取空值,並且返回null以獲得無結果。 也許在您的開發服務器上它從未發生過( query結果為null )。

顯然在生產中你有一個從命令執行返回的NULL或者在連接字符串或其他什么不同的東西; 作為一般規則,在轉換/直接轉換為另一種類型ExecuteScalar的結果之前,應始終測試DBNull。

在這里查看Rein的答案(並投票給他)以獲得他的建議解決方案:

無法將類型為“System.DBNull”的對象強制轉換為“System.String”

在SQL中使用ISNULL()函數。

ISNULL(check_expression,replacement_value)

即...

SELECT ISNULL(SUM(Price),0)FROM Order

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM