我試圖從.net執行SQL Server存儲過程。我發現了錯誤如何查找哪個sql server參數在.net中拋出異常?
誤差變換數據類型數值爲十進制
但我有很難確定哪些SQL參數是罪魁禍首。
有70個,所以我敢肯定有一個比手動搜索更簡單的方法。
在「查看詳細信息」中,是否在異常框中的某處?在此先感謝..
相關的代碼(希望這是有益的......我並沒有包括所有的參數,但是這是模式):
public void WriteKeyStatToDB(KeyStatisticsDataCollection.KeyStatsDP dp)
{
SqlParameter symbol = SqlParameterFactory("@symbol", SqlParamInOrOut.Input, SqlDbType.Char);
SqlParameter dateAdded = SqlParameterFactory("@dateAdded", SqlParamInOrOut.Input, SqlDbType.Date);
SqlParameter tradeDate = SqlParameterFactory("@tradeDate", SqlParamInOrOut.Input, SqlDbType.Date);
SqlParameter marketCapIntra = SqlParameterFactory("@marketCapIntra", SqlParamInOrOut.Input, SqlDbType.Money);
SqlParameter entVal = SqlParameterFactory("@entVal", SqlParamInOrOut.Input, SqlDbType.Money);
SqlParameter trailingPE = SqlParameterFactory("@trailingPE", SqlParamInOrOut.Input, SqlDbType.Decimal);
SqlParameter forwardPE = SqlParameterFactory("@forwardPE", SqlParamInOrOut.Input, SqlDbType.Decimal);
symbol.Value = dp.Symbol;
dateAdded.Value = dp.TradeDate;
tradeDate.Value = dp.TradeDate;
marketCapIntra.Value = dp.MarketCapIntraDay;
entVal.Value = dp.EntValue;
trailingPE.Value = dp.TrailingPE;
forwardPE.Value = dp.ForwardPE;
List<SqlParameter> sqlParams = new List<SqlParameter> {symbol, dateAdded, tradeDate, marketCapIntra, entVal, trailingPE, forwardPE};
ExecuteSproc("spAddKeyStatDP", sqlParams, SqlConnection);
}
private static SqlParameter SqlParameterFactory (String ParamName, SqlParamInOrOut Direction,
SqlDbType SqlType)
{
SqlParameter param = new SqlParameter
{
ParameterName = ParamName,
SqlDbType = SqlType
};
if (Direction == SqlParamInOrOut.Input)
param.Direction = ParameterDirection.Input;
else
param.Direction = ParameterDirection.Output;
return param;
}
private static void ExecuteSproc(String CommandName, List<SqlParameter> ParamList, SqlConnection SqlConn, int Timeout = 0)
{
using (SqlCommand cmd = new SqlCommand(CommandName, SqlConn))
{
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter sp in ParamList)
{
if (sp.Value == null)
sp.Value = DBNull.Value;
cmd.Parameters.Add(sp);
}
cmd.CommandTimeout = Timeout;
cmd.ExecuteNonQuery();
}
}
}
讓我們來看看一些代碼。我假設你正在將某個存儲過程的結果讀入某個類中? – Thelonias 2012-07-31 14:37:01
問題很可能是sql,而不是.net,因爲數字和小數是DB類型。您是否使用存儲過程返回數據或更改數據?有沒有任何計算值。無論是輸入參數,還是需要確定計算結果。 – 2012-07-31 14:40:02
@Ryan謝謝,我在上面添加了代碼,希望它有幫助。你會看到,它將一個類實例添加到數據庫中作爲記錄。 – StatsViaCsh 2012-07-31 15:09:35