由於顯然錯誤地解析了輸出存儲過程參數,我遇到了此錯誤。從存儲過程中放置輸出參數解析
的輸出參數 'whichID' 必須分配到控制離開當前方法之前
代碼:
public static bool CreateFilmTest(string param1, string param2, out int whichID)
{
DbCommand com = GenericDataAccess.CreateCommand();
com.CommandText = "CatalogCreateFilmTest";
DbParameter param = com.CreateParameter();
param.ParameterName = "@param1";
param.Value = param1;
param.DbType = DbType.String;
param.Size = 200;
com.Parameters.Add(param);
..........
param = com.CreateParameter();
param.ParameterName = "@Fid";
param.Direction = ParameterDirection.Output;
param.DbType = DbType.Int32;
com.Parameters.Add(param);
int result = -1;
try
{
result = GenericDataAccess.ExecuteNonQuery(com);
whichID = Int32.Parse(com.Parameters["@Fid"].Value.ToString());
}
catch
{
// ....
}
return (result >= 1);
}
如果我放置:whichID = Int32.Parse(com.Parameters["@Fid"].Value.ToString());
立即行返回前行,該方法執行成功,並給出正確的結果。
但是,如果我將它放在try括號內,它會給出開頭提到的錯誤。
爲什麼這樣?
我的第一選擇是把它的嘗試支架內,因爲如果由於任何原因ExecuteNonQuery
失敗,它沒有任何意義,以處理其輸出參數(whichID
)。因此,我最好在try塊內部結合兩個元素(過程的執行和過程中的輸出參數的處理),在錯誤的情況下觸發catch
內的這種情況的優雅處理。
您的建議非常感謝。謝謝。安娜
如果您將'whichID = ....'行放入try..catch中 - 您需要初始化'whichID' ** out **參數,並在'try之外的某處添加值。 .catch「塊(或在」catch「部分內)。 ** out **參數**必須始終**分配一個值 –