Я хочу передать метод в качестве аргумента для удаления повторяющегося кода из моей программы. Это функциональность я хотел бы:Передача метода в качестве аргумента в другом методе
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());
Возможно ли это?
В дополнении к повторяющимся вопросам, у нас также есть [Действие] (http://msdn.microsoft.com/en-us/library/018hxwa8 (ст = vs.110) .aspx) доступно – musefan
Пожалуйста, подумайте об упаковке кода базы данных в использующем блоке, например, используя (SqlConnection connection = new SqlConnection (connectionString)) {...} – DOK
Обратите внимание, что вам будет намного лучше определить ваш объект подключения как локальная переменная в 'sqlQuery' и передача ее в качестве параметра для вашего делегата, вместо того, чтобы делать это поле экземпляра и иметь другие методы, ссылающиеся на соединение, которое они не знают, открыто или нет. Затем вы захотите использовать делегат 'Action', а не 'Action', и пусть' insertTemplate' принимает соединение в качестве параметра. Это гарантирует, что повсюду, к которому можно получить доступ, вы знаете, что оно открыто. Также можно комбинировать с комментарием DOK. –
Servy