我希望通过将一个方法作为参数传递来消除程序中的重复代码。这是我想要实现的功能:
调用的语句应该是:
这个可能吗?
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());
这个可能吗?
sqlQuery
的本地变量,并将其作为参数传递给委托,而不是将其作为实例字段并使其他方法引用一个它们不知道是否打开的连接。然后,您需要使用Action<SqlConnection>
委托,而不是Action
,并将连接作为参数传递给insertTemplate
。这可以确保您可以访问连接的任何位置都知道它是打开的。也可以与 DOK 的评论结合使用。 - Servy