【问题标题】:Dapper: The ConnectionString property has not been initializedDapper:ConnectionString 属性尚未初始化
【发布时间】:2016-03-22 14:02:43
【问题描述】:

我是第一次玩 Dapper。看起来是一个非常方便的小工具。但我遇到了一个问题。在下面的小控制台应用程序中,第一种方法按预期运行。但是第二种方法返回此错误:

System.Data.dll 中出现“System.InvalidOperationException”类型的未处理异常 附加信息:ConnectionString 属性尚未初始化。

我可以改变方法的顺序并获得相同的结果。我总是在第二次调用时收到错误。不知道我做错了什么。我也尝试不使用 db.Close(),但得到了相同的结果。

无论调用第二个方法,错误都在这一行:

db.Open();

有什么想法吗?谢谢!

class Program
{
    static IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DapperConnection"].ToString());

    static void Main(string[] args)
    {
        IEnumerable<Policy> policy1 = PolicySelectAll();
        IEnumerable<Policy> policy2 = PolicyFindByLastFour("093D");
    }


    public static IEnumerable<Policy> PolicySelectAll()
    {
        var sql = "SELECT * FROM Policy";
        IEnumerable<Policy> policy;
        using (db)
        {
            db.Open();
            policy = db.Query<Policy>(sql);
            db.Close();
        }
        return policy;
    }

    public static IEnumerable<Policy> PolicyFindByLastFour(string LastFour)
    {
        var sql = string.Format("SELECT * FROM Policy WHERE PolicyNumber LIKE '%{0}'", LastFour);
        IEnumerable<Policy> policy;
        using (db)
        {
            db.Open();
            policy = db.Query<Policy>(sql);
            db.Close();
        }
        return policy;
    }
}

之后编辑:

根据答案,我是这样解决的:

class Program
{
    static string connectionString = ConfigurationManager.ConnectionStrings["DapperConnection"].ToString();

    static void Main(string[] args)
    {
        IEnumerable<Policy> policy1 = PolicySelectAll();
        IEnumerable<Policy> policy2 = PolicyFindByLastFour("093D");
    }

    public static IDbConnection GetConnection()
    {
        return new SqlConnection(connectionString);
    }

    public static IEnumerable<Policy> PolicySelectAll()
    {
        IDbConnection db = GetConnection();
        var sql = "SELECT * FROM Policy";
        IEnumerable<Policy> policy;
        using (db)
        {
            db.Open();
            policy = db.Query<Policy>(sql);
            db.Close();
        }
        return policy;
    }

    public static IEnumerable<Policy> PolicyFindByLastFour(string LastFour)
    {
        IDbConnection db = GetConnection();
        var sql = string.Format("SELECT * FROM Policy WHERE PolicyNumber LIKE '%{0}'", LastFour);
        IEnumerable<Policy> policy;
        using (db)
        {
            db.Open();
            policy = db.Query<Policy>(sql);
            db.Close();
        }
        return policy;
    }
}

【问题讨论】:

  • 你正在“使用”数据库,这意味着它会在每次使用后被丢弃,所以在你使用它后一旦连接被破坏......

标签: c# sql .net dapper


【解决方案1】:

如果您将 db 的定义移到方法范围内,那就没问题了。即。

class Program
{
    static void Main(string[] args)
    {
        IEnumerable<Policy> policy1 = PolicySelectAll();
        IEnumerable<Policy> policy2 = PolicyFindByLastFour("093D");
    }


    public static IEnumerable<Policy> PolicySelectAll()
    {
        var sql = "SELECT * FROM Policy";
        IEnumerable<Policy> policy;
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DapperConnection"].ToString()))
        {
            db.Open();
            policy = db.Query<Policy>(sql);
            db.Close();
        }
        return policy;
    }

    public static IEnumerable<Policy> PolicyFindByLastFour(string LastFour)
    {
        var sql = string.Format("SELECT * FROM Policy WHERE PolicyNumber LIKE '%{0}'", LastFour);
        IEnumerable<Policy> policy;
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DapperConnection"].ToString()))
        {
            db.Open();
            policy = db.Query<Policy>(sql);
            db.Close();
        }
        return policy;
    }
}

}

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 2021-06-21
    • 2017-03-03
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多