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

在C#WPF中添加子例程来处理连接字符串的正确方法是什么,c#,wpf,connection-string,C#,Wpf,Connection String,我有一个app.config和一个工作正常的连接字符串 App.config <connectionStrings> <add name="MyConnectionString" connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=myDatabaseC;Data Source=agent_edx44-PC;"

我有一个app.config和一个工作正常的连接字符串

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>
我的问题是我想把这行代码放在一个子例程中,这样我就可以在任何方法中调用它

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
}
但它有一个错误,即:

当前上下文中不存在名称“con”


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

private SqlConnection MyConnection()
{
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    return con;
}
以下是如何使用:

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

使用
块将在处理完数据库连接后处理它。

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

private SqlConnection MyConnection()
{
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    return con;
}
以下是如何使用:

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

使用
块将在完成DB连接后处理它。

以下是您应该如何编写前两种方法:

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

以下是您应该如何编写前两种方法:

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

你这里有一些坏代码。大多数SQL对象都实现了
IDisposable
,因此在处理每个对象时,必须使用
块或调用
.Dispose()
。@Enigmativity您能帮我处理代码吗?我是c#的新手,你这里有些不好的代码。大多数SQL对象都实现了
IDisposable
,因此在处理每个对象时,必须使用
块或调用
.Dispose()
。@Enigmativity您能帮我处理代码吗?我是c#的新手,谢谢你,伙计。它就像一个符咒。我很高兴现在能学到新东西:-)谢谢你,伙计。它就像一个符咒。我现在很高兴学习新东西:-)