【问题标题】:C# cmd.ExecuteScalar(): "Cannot continue the execution because the session is in the kill state."C# cmd.ExecuteScalar():“无法继续执行,因为会话处于终止状态。”
【发布时间】:2016-04-03 18:14:13
【问题描述】:

ExecuteScalar() 得到一个奇怪的异常,我在网上找不到任何帮助:

无法继续执行,因为会话处于终止状态。

我正在使用 SqlConnection/SqlCommand

该命令是一个基本的 INSERT INTO... 有 105 列(和 105 个用于设置列数据的参数),后跟一个 SELECT SCOPE_IDENTITY();

我已经检查了连接字符串 - 它是正确的并且连接是打开的。

我什至不确定这个错误告诉我从哪里开始查看这个错误。

那么这个错误到底是什么意思呢?会话如何开始进入终止状态?

代码非常简单:

using (SqlConnection conn = new SqlConnection(connString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(@"INSERT INTO VendorNote (VendorId, AdminComment...) VALUES (@VendorId, @AdminComment, ...); SELECT SCOPE_IDENTITY(); ", conn))
    {
        cmd.Parameters.AddWithValue("@VendorId", VendorId);
        cmd.Parameters.AddWithValue("@AdminComment", AdminComment);
        Id = (int) cmd.ExecuteScalar();
    }
}

【问题讨论】:

  • 您是仅为该命令创建连接,还是尝试在多个操作之间共享连接?
  • 你能显示代码吗?
  • 连接字符串或查询语法没有问题。即使我用一个简单的选择语句替换我的查询,我也会收到此错误。另外 - 在整个应用程序中成功使用此连接字符串。所以不知何故,会话必须被破坏或什么的。我现在正在回溯在此之前执行的代码,看看我是否无法缩小范围。

标签: c# sql sql-server executescalar


【解决方案1】:

您的代码应如下所示:

const string sqlString = "INSERT INTO dbo.Table ( ....) " +
                         "               VALUES ( .... );" +
                         "SELECT SCOPE_IDENTITY();";
using (conn)
{
    using (var cmd = new SqlCommand(sqlString, conn))
    {
        cmd.Parameters.AddWithValue("@param", param);

        cmd.CommandType = CommandType.Text;
        conn.Open();
        return (int) (decimal) cmd.ExecuteScalar();

    }
}

但请注意,有时存储过程会更合适

【讨论】:

  • 为什么有必要进行这种改变?
  • 好久不见了,我的朋友,我必须这样做是为了让连接一次性
【解决方案2】:

找到了!

查询中存在约束违规,导致查询执行失败。而不是在异常中报告该信息 - 它报告会话处于“终止状态”(我猜),因为查询被提前终止。

我以前从未见过这个错误 - 通常约束错误和这样的异常在异常中有更有用的东西。

所以任何人都收到此错误 - 真正检查您的查询以确保它是有效的。

【讨论】:

    【解决方案3】:

    这可能是由于 Always On 可用性组“故障转移”... 每当我有一个正在运行的查询、连接到一个 AG 侦听器并且发生故障转移时,我都会收到一个 SqlException 消息“无法继续执行,因为会话处于终止状态.'...

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2016-06-30
      • 2019-02-22
      • 1970-01-01
      • 2021-12-20
      • 2020-05-03
      • 2023-03-08
      • 2020-03-21
      相关资源
      最近更新 更多