我正面臨一個問題。在我的情況下,我想選擇max和+ 1以創建新的收據編號,如果它是新收據,它將創建一個新的編號,如下面的代碼所示。然而,我發現了錯誤如果數據庫沒有記錄,則返回一個聲明的int
對象不能從DBNull轉換到其他類型的
這裏是我的代碼。
這個系統是在PDA上運行,所以我用這個Web服務調用數據庫
public string callReceipt(string terminal, ref string msg)
{
try
{
string sql = "Select MAX(ReceiptNo) from ReceiptStore where terminalno ='" + terminal + "'";
Logging.Log.writeLog(sql);
msg = "Success";
int receiptno = Convert.ToInt32(Data.DAL.ExecuteScalar(sql));
if (!(sql is DBNull))
{
return Convert.ToString(receiptno + 1);
}
else
{
int receipt = 100000;
return receipt.ToString();
}
}
catch (Exception e)
{
msg = "Error : " + e.Message.ToString();
Logging.Log.writeLog(msg);
return msg;
}
finally
{
}
}
****** UPDATE ******
感謝所有的答案,SimpleVar提供了正確的答案,並解決了我的問題。再次感謝!
這將是更好地使用存儲過程,而不是增加在客戶端的價值。否則,這是一個競爭條件(1 - 另一個應用程序可以訪問'ReceiptStore' 2 - 此應用程序由多個用戶使用3-數據庫直接訪問)。 –
馬克SimpleVar的作爲正確的一個,而不是更新你的問題或upvote有用的。 – HimBromBeere
@HimBromBeere我接受了,在此之前我無法接受,因此要求我等待幾分鐘。不用擔心,我會永遠接受正確的答案。感謝提醒 – TheButterfly