在C#WPF中添加子例程以处理连接字符串的正确方法是什么

时间:2016-12-27 03:26:01

标签: c# wpf connection-string

我有一个app.config和一个完美运行的连接字符串。

的App.config

Sub test()
Dim fn As String, txt As String, myVal, temp
fn = Application.GetOpenFilename("TextFiles,*.txt")
If fn = "False" Then Exit Sub
txt = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "_(\d+)(?=\|)"
    myVal = Format$(.Execute(txt)(0).submatches(0) + 1, "_000")
    txt = .Replace(txt, myVal)
    Open Replace(fn, ".txt", "_Increment.txt") For Output As #1
        Print #1, txt
        MsgBox "This is batch No" & myVal
    Close #1
End With
End Sub

我的表格

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

但它有一个错误说:

  

名称&#39; con&#39;在当前上下文中不存在

2 个答案:

答案 0 :(得分: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
    });
}

答案 1 :(得分:0)

将MyConnection方法更改为此方法,它将返回SqlConnection:

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

这是使用方法:

using (var con = MyConnection()) 
{
   //your code
}
完成后,

using块会释放您的数据库连接。