在C#WPF中添加子例程来处理连接字符串的正确方法是什么
我有一个app.config和一个工作正常的连接字符串 App.config在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;"
<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#的新手,谢谢你,伙计。它就像一个符咒。我很高兴现在能学到新东西:-)谢谢你,伙计。它就像一个符咒。我现在很高兴学习新东西:-)