0

我有这个存储过程:

Insert into dbo.file_row (file_sub_type) values (@file_sub_type)
DECLARE @result int;
SET @result = SCOPE_IDENTITY()
RETURN @result;

这可以很好地返回 SSMS 中的 id。但是,当我从 C# 调用它时,它返回 -1。

var connection = GetSqlConnection();
connection.Open();

SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "InsertInto_file_row";
command.Parameters.Add(new SqlParameter("@file_sub_type", fileType));

int result = command.ExecuteNonQuery();
connection.Close();
return result;

我看不出我做错了什么。我只需要插入记录的 ID。

格雷格

4

4 回答 4

5

检查ExecuteNonQuery()上的文档:

针对连接执行 Transact-SQL 语句并返回受影响的行数。

(强调我的)

如果你想取回信息,你有几个选择:

  1. 更改RETURNSELECTExecuteNonQuery()_ExecuteScalar()
  2. 使用OUTPUT参数
于 2013-08-26T19:29:27.903 回答
0

要添加到 Joel 的响应中,请尝试 ExecuteScalar

执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。(覆盖 DbCommand.ExecuteScalar()。)

于 2013-08-26T19:31:02.867 回答
0

这将对您有所帮助。如果插入了新行,则该函数返回新的标识列值,失败时返回 0。它来自MSDN

static public int AddProductCategory(string newName, string connString)
{
   Int32 newProdID = 0;
   string sql =
    "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
    + "SELECT CAST(scope_identity() AS int)";
   using (SqlConnection conn = new SqlConnection(connString))
  {
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.Add("@Name", SqlDbType.VarChar);
    cmd.Parameters["@name"].Value = newName;
    try
    {
        conn.Open();
        newProdID = (Int32)cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
return (int)newProdID;

}

于 2013-08-26T19:33:32.067 回答
0
public int AddProductCategory(string newName, string connString)
    {
          string sql =
    "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
    + "SELECT CAST(scope_identity() AS int)";
        using (SqlConnection con = new SqlConnection(conString))
        {
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                cmd.Parameters.AddWithValue("@Name", newName);
               
                con.Open();
                latestInsertedId = (int)cmd.ExecuteScalar();
                con.Close();
            }
            return latestInsertedId ;
        }
    }
于 2021-12-21T03:32:30.013 回答