c# - 使用 SQL Server 插入 C# 后返回 id

标签 c# asp.net sql-server return-value scope-identity

我知道这个问题已经多次出现在这个网站上,但我无法让我的代码正常工作。

我有一个 Insert 语句,我需要在我的 asp.net 页面上从该语句中获取 id。

我得到了返回值 0

public int newid { get; set; }

public void CreateAlbum(string _titel, string _name, string _thumb, int _userid)
{
    objCMD = new SqlCommand(@"INSERT INTO tblFotoalbum 
                                  (fldAlbumHead, fldAlbumName, fldAlbumThumb, fldUserID_FK)
                              VALUES 
                                  (@titel, @name, @thumb, @userid);

                              SET @newid = SCOPE_IDENTITY()");

    objCMD.Parameters.AddWithValue("@titel", _titel);
    objCMD.Parameters.AddWithValue("@name", _name);
    objCMD.Parameters.AddWithValue("@thumb", _thumb);
    objCMD.Parameters.AddWithValue("@userid", _userid);
    objCMD.Parameters.AddWithValue("@newid", newid);

    objData.ModifyData(objCMD);       
}

最佳答案

试试这个:

public int CreateAlbum(string _titel, string _name, string _thumb, int _userid)
{
    // define return value - newly inserted ID
    int returnValue = -1;

    // define query to be executed
    string query = @"INSERT INTO tblFotoalbum (fldAlbumHead, fldAlbumName, fldAlbumThumb, fldUserID_FK)
                              VALUES (@titel, @name, @thumb, @userid);
                     SELECT SCOPE_IDENTITY();"

    // set up SqlCommand in a using block   
    using (objCMD = new SqlCommand(query, connection)) 
    {
        // add parameters using regular ".Add()" method 
        objCMD.Parameters.Add("@titel", SqlDbType.VarChar, 50).Value = _titel;
        objCMD.Parameters.Add("@name", SqlDbType.VarChar, 100).Value = _name;
        objCMD.Parameters.Add("@thumb", SqlDbType.VarChar, 100).Value = _thumb;
        objCMD.Parameters.Add("@userid", SqlDbType.VarChar, 25).Value = _userid;

        // open connection, execute query, close connection
        connection.Open();
        object returnObj = objCMD.ExecuteScalar();

        if(returnObj != null)
        {
           int.TryParse(returnObj.ToString(), out returnValue);
        }

        connection.Close();
    }

    // return newly inserted ID
    return returnValue;
}

不确定如何将它与 objData 类集成 - 也许您需要为此向该 DAL 类添加一个新方法。

查看 Can we stop using AddWithValue() already?并停止使用 .AddWithValue() - 它会导致意外和令人惊讶的结果......

关于c# - 使用 SQL Server 插入 C# 后返回 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28627105/

相关文章:

c# - 使用kinect获得骨骼的旋转(X、Y、Z轴的欧拉角)

c# - ASP.NET 网站调试速度极慢,有数千个临时 ASP.NET 文件

c# - 调用 WCF Web 服务时出错

sql server将exec(@query)的结果保存在字符串中

c# - CodeFirst 加载 1 个链接到 25 000 个子级的父级很慢

c# - 用于实现静态方法的静态字典字段

c# - 如何在 Visual Studio 2017 中禁用 Roslyn 语言服务?

c# - 如何避免在 Radwindow Open 上回发?

asp.net - 我可以修改 Global.asax 之外的 MVC 路由吗?

sql-server - SQL Server 中的事务隔离级别可重复读取