[英]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)您通過調用ExecuteNonQuery
和ExecuteScalar
執行兩次查詢。 因此,每次運行此函數時,您將在表中插入兩條記錄。 您的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.