2016-12-27 57 views
0

我有一個app.config和一個完美的連接字符串。什麼是正確的方法來添加子程序來處理C#中的連接字符串WPF

的App.config

<connectionStrings> 
    <add name="MyConnectionString" 
     connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=myDatabaseC;Data Source=agent_edx44-PC;" 
     providerName="System.Data.SqlClient"/> 
    </connectionStrings> 

我的形式

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;   
    con.Open(); 
    SqlCommand cmd = new SqlCommand("uspINSERT",con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 
    .....some code 
} 

private void bindDataGrid() 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("uspSELECTALL",con); 
    cmd.Connection = con; 
    ...some code 

} 

我的問題是我想把這行代碼的子程序裏面,這樣我可以在任何方法調用它。

SqlConnection con = new SqlConnection(); 
con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 

這是我迄今所做的:

private void MyConnection() 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
} 
private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    MyConnection() 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("uspINSERT",con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 
    .....some code 
} 

但它有一個錯誤說:

名稱「騙子」不當前存在背景

+2

你在這裏有一些不好的代碼。大多數SQL對象實現'IDisposable',所以當你完成每個對象時,你必須使用'using'塊或調用'.Dispose()'。 – Enigmativity

+0

@Enigmativity你能幫我用我的代碼嗎?我是新來的c# –

回答

2

這裏是你應該如何將這些前兩種方法寫:

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    using (SqlConnection con = new SqlConnection()) 
    { 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand("uspINSERT", con)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 
      //.....some code 
     } 
    } 
} 

private void bindDataGrid() 
{ 
    using (SqlConnection con = new SqlConnection()) 
    { 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand("uspSELECTALL", con)) 
     { 
      cmd.Connection = con; 
      //...some code 
     } 
    } 
} 

現在,讓你的新代碼工作,你需要返回從MyConnection方法連接:

private SqlConnection MyConnection() 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    return con; 
} 

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    using (SqlConnection con = MyConnection()) 
    { 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand("uspINSERT", con)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 
      //.....some code 
     } 
    } 
} 

現在,我會更進一步,並做到這一點:

private void RunSqlCommand(string cmdText, Action<SqlConnection, SqlCommand> execute) 
{ 
    using (SqlConnection con = new SqlConnection()) 
    { 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand(cmdText, con)) 
     { 
      cmd.Connection = con; 
      execute(con, cmd); 
     } 
    } 
} 

現在你的btnSave_Click方法可以變成這樣:

private void btnSave_Click(object sender, RoutedEventArgs e) 
{ 
    RunSqlCommand("uspINSERT", (con, cmd) => 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text); 
     //.....some code 
    }); 
} 
+0

謝謝隊友。它像一個魅力。我很高興現在學習新的東西:-) –

0

更改您的MyConnection會見HOD這一點,它返回一個SqlConnection:

private SqlConnection MyConnection() 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    return con; 
} 

這是如何使用:

using (var con = MyConnection()) 
{ 
    //your code 
} 

using塊將處置您的數據庫連接你用它做了。

相關問題