添加子例程以处理 C# WPF 中的连接字符串的正确方法是什么
What is the proper way to add subroutine to handle the connection string in C# WPF
我有一个 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>
我的表格
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
}
但是它有一个错误说:
The name 'con' does not exist in the current context
将您的 MyConnection 方法更改为此,它 returns 一个 SqlConnection:
private SqlConnection MyConnection()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
return con;
}
这是使用方法:
using (var con = MyConnection())
{
//your code
}
using
块将在您完成后处理您的数据库连接。
前两个方法的编写方式如下:
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
}
}
}
现在,要让您的新代码正常工作,您需要 return 来自 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
});
}
我有一个 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>
我的表格
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
}
但是它有一个错误说:
The name 'con' does not exist in the current context
将您的 MyConnection 方法更改为此,它 returns 一个 SqlConnection:
private SqlConnection MyConnection()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
return con;
}
这是使用方法:
using (var con = MyConnection())
{
//your code
}
using
块将在您完成后处理您的数据库连接。
前两个方法的编写方式如下:
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
}
}
}
现在,要让您的新代码正常工作,您需要 return 来自 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
});
}