2016-03-22 16 views
2

İlk defa Dapper ile oynuyorum. Oldukça kullanışlı küçük bir araç gibi görünüyor. Ama bir problemle karşılaşıyorum. Aşağıdaki küçük konsol uygulamasında, ilk yöntem beklendiği gibi çalışır. İkinci yöntem bu hatayı döndürür Ancak:Dapper: ConnectionString özelliği başlatılmadı

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

Etrafa yöntemlerden sırasını açmak ve aynı sonuçları elde edebilirsiniz. Her zaman ikinci çağrıda hata alıyorum. Yanlış yaptığımdan emin değilim. Ben de db.Close() kullanmayı denedim, ama aynı sonucu aldım.

hata bu hat üzerinde olan herhangi bir yöntemi ikinci denir:

db.Open(); 

bir fikir? Teşekkürler!

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

DÜZENLEME SONRASI: yanıtlara göre

, bu bunu nasıl çözdüğünü şudur: yöntem kapsam içine db sizin tanımı taşırsanız

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

, bunun her kullanımdan sonra imha edilecek demektir, bu nedenle kullandıktan sonra bağlantı yok edilir kez ... – Gusman

cevap

1

her şey yoluna girecektir. I.E.

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

} Eğer db "kullanılarak" olan