C# 代码>,将命令放在“监视”窗口上,并检查将显示的类型。看起来,出于某种原因,它不是int,尽管有convert。然后你可能会更接近了解发生了什么。我现在会检查一下。知道为什么使用using语句会突然改变数据类型吗?因为它在第一个代码块中工作。为什么需要使用

C# 代码>,将命令放在“监视”窗口上,并检查将显示的类型。看起来,出于某种原因,它不是int,尽管有convert。然后你可能会更接近了解发生了什么。我现在会检查一下。知道为什么使用using语句会突然改变数据类型吗?因为它在第一个代码块中工作。为什么需要使用,c#,sql-server-ce,using,C#,Sql Server Ce,Using,代码>,将命令放在“监视”窗口上,并检查将显示的类型。看起来,出于某种原因,它不是int,尽管有convert。然后你可能会更接近了解发生了什么。我现在会检查一下。知道为什么使用using语句会突然改变数据类型吗?因为它在第一个代码块中工作。为什么需要使用单独的连接查询@@IDENTITY?难道不能在插入代码的地方进行吗?啊。所以我根本不能以这种方式使用using语句?您必须在同一个using语句中执行insert和@IDENTITY。啊。因此,我根本无法以这种方式使用using语句?您必须在同


代码>,将命令放在“监视”窗口上,并检查将显示的类型。看起来,出于某种原因,它不是int,尽管有convert。然后你可能会更接近了解发生了什么。我现在会检查一下。知道为什么使用
using
语句会突然改变数据类型吗?因为它在第一个代码块中工作。为什么需要使用单独的连接查询
@@IDENTITY
?难道不能在插入代码的地方进行吗?啊。所以我根本不能以这种方式使用
using
语句?您必须在同一个using语句中执行insert和@IDENTITY。啊。因此,我根本无法以这种方式使用
using
语句?您必须在同一个using语句中执行insert和@IDENTITY。SQL Server Compact中没有作用域标识()完全忽略了这一点,但SQL Server Compact中的模式usableNo Scope\U IDENTITY()完全忽略了这一点,但模式仍然可用
    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;
    }
    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;
    }
public static int GetLastInsertedID(DbConnection connection)
{
    try
    {
        string query = "SELECT CONVERT(int, SCOPE_IDENTITY())";
        using (SqlCeCommand cmd = new SqlCeCommand(query, conn)) {
            return (int)cmd.ExecuteScalar();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not get last inserted ID. " + ex.Message);
        return 0;
    }
}
public static SqlCeConnection OpenDefaultConnection()
{
    SqlCeConnection conn = new SqlCeConnection(DbConnection.compact);
    conn.Open();
    return conn;
}
...
using (SqlCeConnection conn = OpenDefaultConnection()) {
    //... do smth
    int id = GetLastInsertedID(conn);
    //... do smth
}
...