Dapper 未初始化 ConnectionString 属性 错误

The ConnectionString property has not been initialized Error with Dapper

我执行 SQL 插入命令的代码是这样的

foreach (var id in idlist)
{
    _connection.Open();
    var sql = "sql query"
    var parameters = ....

    await _connection.ExecuteAsync(sql, parameters);
    _connection.Close();
}

看起来一切正常,但是循环只运行了一次成功,第二次进入就报错

The ConnectionString property has not been initialized.

谁能指出我这里可能做错了什么?

注意:我也尝试将连接打开和关闭移出循环,但结果仍然相同。

您的代码应如下所示:

_connection.Open();
var sql = "sql query"

foreach (var id in idlist)
{
    var parameters = ....
    await _connection.ExecuteAsync(sql, parameters);
}
_connection.Close();

如果您只执行一次,请忽略打开和关闭(Dapper 会这样做),除非您的连接已注册到事务中

_connection 的命名就好像它是一个 class 级变量一样。当循环为 运行 时,请确保您没有在别处操纵它。我不会说您通过持有对连接的引用而获得很多,也许可以考虑:

using var connection = new SqlConnection("your conn string");
connection.Open();
var sql = "sql query"

foreach (var id in idlist)
{
    var parameters = ....
    await _connection.ExecuteAsync(sql, parameters);
}
connection.Close();

错误处理将根据您想要执行的操作而有所不同,例如,如果一个插入在批次中失败 - 全部转储,停止并修复,忽略并继续。