我正面临一个问题。在我的情况下,我想选择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