我正在编写一个Sql-Server-ce
应用程序C#
。
最近我一直在将我的代码转换为使用using
语句,因为它们更干净。在我的代码中,我有一个GetLastInsertedID
非常简单的函数——它返回最后插入的 ID。工作版本如下:
public static int GetLastInsertedID()
{
int key = 0;
try
{
SqlCeCommand cmd = new SqlCeCommand("SELECT CONVERT(int, @@IDENTITY)", DbConnection.ceConnection);
key = (int)cmd.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show("Could not get last inserted ID. " + ex.Message);
key = 0;
}
return key;
}
using
以下是我将其包装在语句中后不起作用的代码:
public static int GetLastInsertedID()
{
int key = 0;
try
{
using (SqlCeConnection conn = new SqlCeConnection(DbConnection.compact))
{
conn.Open();
using (SqlCeCommand cmd = new SqlCeCommand("SELECT CONVERT(int, @@IDENTITY)", conn))
key = (int)cmd.ExecuteScalar();
}
}
catch (Exception ex)
{
MessageBox.Show("Could not get last inserted ID. " + ex.Message);
key = 0;
}
return key;
}
我得到的错误是specified cast is not valid
. 虽然这个错误通常是不言自明的,但我不明白为什么我会在第二个代码块中得到它,而不是第一个。出现这个错误就行了key = (int)cmd.ExecuteScalar();
。
我对第二个代码块做错了什么?