2016-06-21 44 views
-1

我們正在將舊的C#應用​​程序遷移到最新版本的C#(和.NET框架),並在測試過程中遇到問題。沒有什麼earthshattering - 只是基本的數據訪問代碼。C#SqlParameter of 0 changed'default'

具體來說,我們正在創建一個名爲'@BalanceForward'的SqlParameter。在這個特殊情況下,我們將這個值設置爲零 - 儘管它顯然可以是其他值。當執行存儲過程時,我們得到一個錯誤,該過程期望一個名爲'@BalanceForward'的參數,但它沒有被指定。奇。

我們跑了SQL跟蹤,看到下面的...

EXEC usp_Transaction_Create @編號=「虛值」,@ BalanceForward =默認

正如你所看到的,零金額被更改幕後「默認」。它必須是一個.NET框架行爲改變 - 從仍在生產的版本看SQL跟蹤,零美元數量傳遞爲0.00。

有沒有辦法來禁用這個,只是讓它通過實際值而不是'默認'?我們並不想通過數百個存儲過程來解釋這可能發生的可能性。

+2

沒有觸發這個錯誤的代碼很難說什麼。很確定這個基本功能沒有改變,否則...... – Steve

+1

你如何設置參數的值?請參閱http://stackoverflow.com/questions/5356862/sqlparameter-with-default-value-set-to-0-doesnt-work-as-expected – Nikki9696

回答

0

我們使用此代碼...

cmd.Parameters.Add(DataFactory.CreateParameter("@BalanceForward", 0)); 

public static DbParameter CreateParameter(string name, object value) 
{ 
    DbParameter param = _dataFactory.CreateParameter(); 
    param.ParameterName = name; 
    if (value == null) 
     param.Value = DBNull.Value; 
    else 
     param.Value = value; 
    return param; 
} 

但是 - 我們現在已經跨在一些點到的SqlParameter對象添加AddWithValue選項絆倒了。我們一直使用抽象的DbCommand,DbConnection,DbParameter等對象,並通過app.config設置傳遞給提供者。

從抽象版本切換到SqlParameter對象並使用AddWithValue選項已解決該問題。現在 - 解決如何使用DbParameter對象,將所有抽象代碼轉換爲System.Data.SqlClient版本,或者修改所有存儲過程的問題。