2016-03-22 13 views
2

Dapperを初めて使用しています。かなり便利な小さなツールのように見えます。しかし、私は1つの問題に遭遇しています。下の小さなコンソールアプリケーションでは、最初のメソッドが期待どおりに実行されます。しかし、2番目の方法ではこのエラーが返されます。Dapper:ConnectionStringプロパティが初期化されていません

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll Additional information: The ConnectionString property has not been initialized.

私は方法の順序を変えて同じ結果を得ることができます。それは私がエラーを得ることは常に2番目の呼び出しである。私が間違っていることを確信していない。私も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; 
    } 
} 

EDIT AFTER:回答に基づいて

、これは私がそれを解決する方法である:

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; 
    } 
} 
+2

は、それはそれは、各使用後に廃棄されることを意味しますので、あなたがそれを使用した後、接続が破棄されると... – Gusman

答えて

1

あなたはメソッドのスコープにデシベルのあなたの定義を移動した場合、それは罰金になります。 I.

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; 
    } 
} 

}あなたはデシベル「を使用して」いる

関連する問題