【发布时间】:2013-07-01 06:21:54
【问题描述】:
我想传递一个方法作为参数来从我的程序中删除重复的代码。这是我想要的功能:
private void sqlQuery(Method sqlMethod)
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
try
{
//open SQL connection
conn.Open();
sqlMethod();
}
catch (Exception ex)
{
System.Diagnostics.Debug.Write(ex.ToString());
}
finally
{
conn.Close();
}
}
使用:
private void insertTemplate()
{
//create SQL command
SqlCommand insertTemplate = new SqlCommand("INSERT INTO [SavedDescriptionTemplates] (SavedDescription, UserId, CreatedDate) VALUES (@descriptionParam, @userIdParam, @createdDateParam)", conn);
//create and assign parameters
insertTemplate.Parameters.AddWithValue("@descriptionParam", descriptionInput.Text);
insertTemplate.Parameters.AddWithValue("@userIdParam", Int32.Parse(userNameDropDown.SelectedItem.Value));
insertTemplate.Parameters.AddWithValue("@createdDateParam", DateTime.Now);
//execute command and retrieve primary key from the above insert and assign to variable
insertTemplate.ExecuteNonQuery();
}
电话是:
sqlQuery(insertTemplate());
这可能吗?
【问题讨论】:
-
除了重复的问题,我们还有Action可用
-
请考虑将您的数据库代码包装在 using 块中,例如 using (SqlConnection connection = new SqlConnection(connectionString)){...}
-
请注意,您最好将连接对象定义为
sqlQuery的局部变量并将其作为参数传递给您的委托,而不是使其成为实例字段并让其他方法引用他们不知道是否打开的连接。然后你会想要使用Action<SqlConnection>委托,而不是Action,并让insertTemplate接受连接作为参数。这可确保您知道连接在任何地方都可以访问,它是打开的。也可以结合DOK的评论。
标签: c#