C#cmd.ExecuteScalar():"由于会话处于kill状态,因此无法继续执行。"

时间:2015-12-29 20:02:25

标签: c# sql sql-server executescalar

public void ConfigureServices(IServiceCollection services) { services.AddOptions(); services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); } 获取一个奇怪的例外,我在网上找不到任何帮助:

  

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

我正在使用SqlConnection / SqlCommand

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

我已检查过连接字符串 - 它是正确的,连接已打开。

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

那么这个错误究竟意味着什么呢?会话如何从kill状态开始?

代码很简单:

ExecuteScalar()

3 个答案:

答案 0 :(得分:7)

发现它!

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

我之前从未见过这个错误 - 通常是约束错误,这样在异常中有更多用处。

所以任何人都会收到此错误 - 请务必检查您的查询以确保其有效。

答案 1 :(得分:2)

这可能是由于Always On Availability Group&#39; Failover&#39; ... 每当我有一个正在运行的查询,连接到AG Listener,并且有故障转移时,我得到一个 SqlException ,消息为&#39; 无法继续执行因为会话在杀戮状态。&#39; ...

答案 2 :(得分: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();

    }
}

但请注意,某个时候存储过程会更合适