【问题标题】:C# return Identity on InsertC# 在插入时返回标识
【发布时间】:2013-11-18 21:08:46
【问题描述】:

我有一个问题,我需要返回我刚刚在 c# 中创建的记录的标识并将其保存为整数。 我在互联网上看到了很多例子,但我似乎无法根据我的需要调整它。 任何帮助表示赞赏

cmprawf.CommandText = "INSERT INTO profiion( // Code that inserts in the right place )";
cmprawf.ExecuteNonQuery();
cnTB.Close();

【问题讨论】:

  • 您说您无法适应您所看到的大量示例,但在这种情况下,这里的答案对您没有帮助。根据您的说法,您具体尝试过哪些应该有效但无效的方法?

标签: c# sql


【解决方案1】:

您可以在批处理中添加SELECT 并返回新创建的标识符:

cmprawf.CommandText = "INSERT INTO profiion( // Code that inserts in the right place );" + 
                      "SELECT SCOPE_IDENTITY()";
int newID = (int)cmprawf.ExecuteScalar();
cnTB.Close();

【讨论】:

  • Scope_Identity 返回numeric(38,0),因此您不能在客户端将其转换为int,而不将其转换为数据库。另一种方法:首先使用 C# 将其转换为 decimal
  • 谢谢!正是我需要的!
【解决方案2】:

SELECT SCOPE_IDENTITY 添加到您的查询中,然后您可以通过ExecuteScalar 检索它:

string sql = @"INSERT INTO profiion( // Code that inserts in the right place );
               ;SELECT CAST(scope_identity() AS int)";
cmprawf.CommandText = sql;
int newID = (int)cmprawf.ExecuteScalar();

【讨论】:

    【解决方案3】:

    您只需选择 SCOPE_IDENTITY 并使用 ExecuteScalar 检索它。

    cmprawf.CommandText = "INSERT INTO profiion( // Code that inserts in the right place ); SELECT SCOPE_IDENTITY();"; int id = cmprawf.ExecuteScalar(); cnTB.Close();

    【讨论】:

      【解决方案4】:

      如果你的数据库是 SQL Server 那么

      cmprawf.CommandText = "INSERT INTO profiion( // 插入正确位置的代码 );SELECT SCOPE_IDENTITY()"; int yourId = (int)cmprawf.ExecuteScalar(); cnTB.Close();

      如果你想使用参数,你可以随时查看微软的最后一部分信息(更好)

      http://technet.microsoft.com/en-us/library/ms190315.aspx

      【讨论】:

        【解决方案5】:

        可以使用sql命令的返回值。每个存储过程都可以有一个 int 类型的返回值,您可以按如下方式检索它:

        SqlParameter returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int);
          returnParameter.Direction = ParameterDirection.ReturnValue;
          cmd.ExecuteNonQuery();
        
          int id = (int) returnParameter.Value;
        

        代码复制自这篇文章的第二个答案: Get Return Value from Stored procedure in asp.net

        此外,在您的存储过程中,您可以通过调用SCOPE_IDENTITY() 函数来获取插入行的 ID。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-06
          相关资源
          最近更新 更多