簡體   English   中英

檢索scope_identity時,特定強制轉換無效

[英]Specific cast is not valid, while retrieving scope_identity

我得到例外:“具體演員無效”,這里是代碼

con.Open();
string insertQuery = @"Insert into Tender (Name, Name1, Name2) values ('Val1','Val2','Val3');Select Scope_Identity();";

SqlCommand cmd = new SqlCommand(insertQuery, con);
cmd.ExecuteNonQuery();
tenderId = (int)cmd.ExecuteScalar();

為了完整性,您的代碼示例有三個問題。

1)您通過調用ExecuteNonQueryExecuteScalar執行兩次查詢。 因此,每次運行此函數時,您將在表中插入兩條記錄。 您的SQL雖然是兩個不同的語句,但它們將一起運行,因此您只需要調用ExecuteScalar

2) Scope_Identity() 返回一個小數 您可以對查詢結果使用Convert.ToInt32 ,也可以將返回值轉換為decimal,然后轉換為int。

3)確保將連接和命令對象包裝在using語句中,以便正確處理它們。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        connection.Open();
        int tenderId = (int)(decimal)command.ExecuteScalar();
    }
}

試試這個:-

con.Open();
string insertQuery = @"Insert into Tender (Name, Name1, Name2) values ('Val1','Val2','Val3');Select Scope_Identity();";

SqlCommand cmd = new SqlCommand(insertQuery, con);
tenderId = Convert.ToInt32(cmd.ExecuteScalar());

編輯

它應該是這樣,因為正確指出scope_identity()返回一個數字(38,0): -

tenderId = Convert.ToInt32(cmd.ExecuteScalar());

注意:您仍然需要刪除: -

cmd.ExecuteNonQuery();

首先測試以下內容:

object id = cmd.ExcuteScalar()

設置一個斷點並查看id的類型。 它可能是一個Decimal ,不能直接轉換為int

它需要Convert.ToInt32(cmd.ExecuteScalar());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM