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

SSIS迁移SQL Server脚本到MySQL报Connection must be valid and open错误

问题排查与解决方案

错误根因

你遇到的Connection must be valid and open报错,本质是MySQL .NET驱动的适配逻辑和SQL Server驱动不同导致:

  • SSIS的ADO.NET连接管理器针对SQL Server的SqlClient驱动做了适配,调用AcquireConnection返回的连接默认是打开状态;但MySQL官方的MySql.Data驱动没有做对应适配,拿到的连接实例默认处于关闭状态,直接执行SQL命令就会抛出该异常。
  • 你的代码中额外存在逻辑冗余问题:每次遍历文件都重复实例化、获取连接,且使用完未主动释放连接,容易引发连接泄漏。

修复步骤

1. 核心连接状态修复

在获取MySQL连接实例后,新增连接状态判断和打开逻辑,修改对应代码段如下:

MySqlConnection myADONETConnection = (MySqlConnection)(Dts.Connections["DB_Conn_IBDRStagingDev"].AcquireConnection(Dts.Transaction) as MySqlConnection);
// 新增连接打开判断
if (myADONETConnection.State != ConnectionState.Open)
{
    myADONETConnection.Open();
}

2. 可选优化(推荐执行)

  • 把连接获取逻辑移到foreach (string fileName in fileEntries)循环外部,不需要每个文件都重复获取连接
  • 所有文件处理完成后,主动释放连接资源:
Dts.Connections["DB_Conn_IBDRStagingDev"].ReleaseConnection(myADONETConnection);
  • 逐行插入性能较差,且如果CSV内容包含单引号会触发SQL语法错误,建议替换为MySQL原生LOAD DATA INFILE命令做批量导入,性能可提升10~100倍,同时避免SQL注入风险。

3. 单引号转义临时修复

如果暂时不想替换批量导入逻辑,需要在拼接SQL前对内容做单引号转义:

query += "VALUES('" + line.Replace(FileDelimiter, "','").Replace("'", "''") + "')";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:21:02