首页 > 解决方案 > ConnectionString 属性尚未初始化 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.

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

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

标签: c#.netado.netdapper

解决方案


您的代码应如下所示:

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

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

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

_connection就像它是一个类级别的变量一样命名。确保循环运行时您没有在其他地方操作它。我不会说你通过引用一个连接获得了很多,也许考虑一下:

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();

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


推荐阅读