Вы можете исключить дублирование кода делегатами.
например:
если мне нужно закончить две задачи с базой данных:
OleDbCommand oci = new OleDbCommand(queryString, connection);
oci.Connection.Open();
oci.CommandText = "delete * from firstTable";
oci.ExecuteNonQuery();
oci.Connection.Close();
OleDbCommand ocn = new OleDbCommand(queryString, connection);
ocn.Connection.Open();
ocn.CommandText = "select count(*) from secondTable";
int affected = convert.ToInt32(ocn.ExecuteScalar();
ocn.Connection.Close();
как вы видите, мы продублировали здесь код. Поэтому мне нужно изменить код моего кода следующим образом:
OleDbCommand myAccessCommand = null;
int count = -1;
OleDbWork(secondConnectionString, "SELECT COUNT(*) FROM secondTable",
out myAccessCommand,
() =>
{
count = Convert.ToInt32(myAccessCommand.ExecuteScalar());
});
OleDbWork(firstConnectionString, "delete * from firstTable",
out myAccessCommand,
() =>
{
myAccessCommand.ExecuteNonQuery();
}
и мой метод OleDbWork будет выглядеть так:
internal bool OleDbWork(string connString, string command,
out OleDbCommand myAccessCommand, Action action)
{
OleDbConnection myAccessConn = null;
myAccessCommand = null;
try
{
myAccessConn = new OleDbConnection(connString);
}
catch (Exception)
{
MessageBox.Show("Cannot connect to database!");
return false;
}
try
{
myAccessCommand = new OleDbCommand(command, myAccessConn);
myAccessConn.Open();
action();
return true;
}
catch (Exception ex)
{
MessageBox.Show("Cannot retrieve data from database. \n{0}",
ex.Message);
return false;
}
finally
{
myAccessConn.Close();
}
}
Надеюсь, это поможет