Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法强制转换类型为';System.DBNull';输入';System.String';在C中#_C#_Sql Server - Fatal编程技术网

C# 无法强制转换类型为';System.DBNull';输入';System.String';在C中#

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

大家好

正在尝试生成自动事务ID。当存在第一条记录或多条记录时,下面的代码可以正常工作。但是,如果该表不包含任何数据,它将抛出错误“无法将类型为'System.DBNull'的对象强制转换为类型为'System.String'

下面是代码。请帮忙

 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.
}