c# - 在Sql中执行插入命令并返回插入的Id

标签 c# sql sql-server asp.net-mvc-4

我在 MVC 4 中使用 C# 将一些值插入到 SQL 表中。实际上,我想插入值并返回最后插入记录的“ID”。我使用以下代码。

public class MemberBasicData
{
    public int Id { get; set; }
    public string Mem_NA { get; set; }
    public string Mem_Occ { get; set; }     
}

ID 在插入时在数据库中自动递增。

public int CreateNewMember(string Mem_NA, string Mem_Occ )
{
    using (SqlConnection con=new SqlConnection(Config.ConnectionString))
    {
        using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) VALUES(@na,@occ)",con))
        {
            cmd.Parameters.AddWithValue("@na", Mem_NA);
            cmd.Parameters.AddWithValue("@occ", Mem_Occ);
            con.Open();

            int modified = cmd.ExecuteNonQuery();

            if (con.State == System.Data.ConnectionState.Open) con.Close();
                return modified;
        }
    }
}
   

我知道 ExecuteNonQuery 表示影响行的数字。而不是我使用

int modified = (int)cmd.ExecuteScalar();

但它不起作用。请帮我解决这个问题。是否有类似 cmd.ExecuteInsertAndGetID() 的代码(不适用于我的代码)。

最佳答案

以下解决方案适用于 sql server 2005 及更高版本。您可以使用 output获取所需的字段。代替 id 你可以写你想要返回的 key 。这样做

适用于 SQL SERVER 2005 及更高版本

    using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ) output INSERTED.ID VALUES(@na,@occ)",con))
    {
        cmd.Parameters.AddWithValue("@na", Mem_NA);
        cmd.Parameters.AddWithValue("@occ", Mem_Occ);
        con.Open();

        int modified =(int)cmd.ExecuteScalar();

        if (con.State == System.Data.ConnectionState.Open) 
            con.Close();

        return modified;
    }
}

对于以前的版本

    using(SqlCommand cmd=new SqlCommand("INSERT INTO Mem_Basic(Mem_Na,Mem_Occ)  VALUES(@na,@occ);SELECT SCOPE_IDENTITY();",con))
    {
        cmd.Parameters.AddWithValue("@na", Mem_NA);
        cmd.Parameters.AddWithValue("@occ", Mem_Occ);
        con.Open();

        int modified = Convert.ToInt32(cmd.ExecuteScalar());

        if (con.State == System.Data.ConnectionState.Open) con.Close();
            return modified;
    }
}

关于c# - 在Sql中执行插入命令并返回插入的Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18373461/

相关文章:

c# - .NET:打开嵌入在资源文件中的文件

java - 对应用程序上下文的引用是否会泄漏我保留的 fragment ?

sql - MySQL合并多行

MySQL关系和查询

mysql - 如何在mysql中使用HAVING选择带有x但不带有y或z的行

python - 具有非 ascii 列的 SQLAlchemy 映射表到类

c# - 我如何获得等同于 linq 表达式的 sql 查询

c# - json.net,将新对象/项目添加/附加到现有 JSON 对象中

c# - 客户端通过 Internet 访问 SQL Server

sql - 如何在多列中计算一个变量