You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关闭Adomd连接后借助原有会话执行命令的实现方案咨询

问题原因

  • 你创建的AdomdCommand实例未关联到保存了目标会话的AdomdConnection对象,命令执行时找不到可用连接上下文
  • 调用Close(false)仅会保留服务端的会话资源,本地连接对象本身仍处于关闭状态,不能直接用来执行命令,需要重新打开连接,只要会话ID未变更,就会复用之前的服务端会话,而不是新建会话

正确实现方案

你需要先给命令绑定连接对象,且执行命令前重新打开连接,修正后的可运行代码如下:

try
{
    using (AdomdConnection adomdConnection = new AdomdConnection("MY Connection String"))
    {
        adomdConnection.Open();
        // 可将会话ID保存到其他位置,供其他连接对象复用
        string savedSessionId = adomdConnection.SessionID;
        // 传false关闭本地连接,保留服务端会话
        adomdConnection.Close(false);

        while (true)
        {
            // 重新打开连接,自动关联原有服务端会话
            adomdConnection.Open();
            String query = @"EVALUATE { BLANK()}";
            // 给命令绑定对应连接对象
            AdomdCommand adomdCommand = new AdomdCommand(query, adomdConnection);
            Console.WriteLine(adomdConnection.SessionID.ToString() + "  " + DateTime.Now.ToString());
            AdomdDataReader reader = adomdCommand.ExecuteReader();
            reader.Close();
            // 执行完成后关闭本地连接,继续保留服务端会话
            adomdConnection.Close(false);
            System.Threading.Thread.Sleep(30000);
        }
    }
}
catch(AdomdConnectionException ex)
{
    Console.WriteLine(ex.Message.ToString());
}

注意事项

  • 服务端会话存在超时阈值,若两次操作的间隔超过服务端配置的会话超时时间,会话会被自动回收,需要重新创建会话
  • 如果你需要用全新的连接对象复用已有会话,只需在连接字符串中添加Session Id=你之前保存的会话ID,打开新连接后就会自动关联到已有的服务端会话

内容的提问来源于stack exchange,提问作者Kaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:09:00