C# 无法强制转换类型为';System.DBNull';输入';System.String';在C中#
大家好 正在尝试生成自动事务ID。当存在第一条记录或多条记录时,下面的代码可以正常工作。但是,如果该表不包含任何数据,它将抛出错误“无法将类型为'System.DBNull'的对象强制转换为类型为'System.String' 下面是代码。请帮忙C# 无法强制转换类型为';System.DBNull';输入';System.String';在C中#,c#,sql-server,C#,Sql Server,大家好 正在尝试生成自动事务ID。当存在第一条记录或多条记录时,下面的代码可以正常工作。但是,如果该表不包含任何数据,它将抛出错误“无法将类型为'System.DBNull'的对象强制转换为类型为'System.String' 下面是代码。请帮忙 public string TransactionID() { string connString = CommonVariables.ConnectionString; string sql = "SELEC
public string TransactionID()
{
string connString = CommonVariables.ConnectionString;
string sql = "SELECT MAX(Transaction_ID) FROM tbl_Transactions";
using (SqlConnection cnn = new SqlConnection(connString))
{
cnn.Open();
using (SqlCommand cmd = new SqlCommand(sql, cnn))
{
string max_ID = (string)cmd.ExecuteScalar();
if (max_ID == null || Convert.IsDBNull(max_ID.ToString()))
{
Transaction_ID = "17900000000001";
return Transaction_ID;
// MessageBox.Show("Maximum ID does not Exist", "Customer Exist", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
double newTransaction_ID = double.Parse(max_ID) + 1;
Transaction_ID = newTransaction_ID.ToString();
return Transaction_ID;
//MessageBox.Show("Maximum ID Exist, It is " + max_ID, "Customer Exist", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
不要对变量max_ID使用字符串,而是使用object。您只需更改下面的行即可。您可以在select语句中从查询中返回默认值,如空字符串或零,以便下一行不会给出错误
SELECT MAX(IsNull(Transaction_ID, 0)) FROM tbl_Transactions
您需要检查max(Transaction\u ID)
的值为什么没有返回值。这可能是由于表中没有任何记录
string max_ID = (string)cmd.ExecuteScalar();
您还可以使用Convert.ToString(cmd.ExecuteScalar())
来处理空值异常
if (max_ID == null || Convert.IsDBNull(max_ID.ToString()))
到
这是因为如果
max\u ID
将null
在这种情况下max\u ID.ToString()
将给出错误。这是否回答了您的问题@不,它没有解决问题。我得到一个引用的对象是非static@mantics在if块中,您没有声明事务ID并仅为其赋值。例外情况如下:(string)cmd.ExecuteScalar()
@JohnathanBarclay也更新了该部分的答案。谢谢。我的已经收回了。这解决了问题problem@SurajKumar谢谢
if (String.IsNullOrEmpty(max_ID))
{
//Your if block statement.
}
else
{
//Your else block statement.
}