我有一个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;在当前上下文中不存在
答案 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
块会释放您的数据库连接。