作为占位符的类型(类)?(避免复制/粘贴)
本文关键字:复制 粘贴 占位符 类型 | 更新日期: 2023-09-27 18:21:27
我有这个代码:
OracleConnection myOracleConnection = new OracleConnection(connectionString);
myOracleConnection.Open();
OracleCommand command = myOracleConnection.CreateCommand();
command.CommandText =
SchemaDifferenceFinder.Model.SQLStatements.MissingTables.DropTable;
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
myOracleConnection.Close();
在线4上,您可以找到"MissingTables"。这是一个类。
这个整个代码将重复7次,一切都一样,只是这个类发生了变化,例如:"MissingColumns"。但我不想复制/粘贴整个代码,只想替换这个小东西。
我能做什么?有仿制药吗?如果需要的话,我也可以通过参数等。感谢每一个解决方案!
private static void ExecuteSQL(string SQL)
{
OracleConnection myOracleConnection = new OracleConnection(connectionString);
myOracleConnection.Open();
OracleCommand command = myOracleConnection.CreateCommand();
command.CommandText = SQL;
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
myOracleConnection.Close();
}
这可以被称为以下方式:
Helper.ExecuteSQL(SchemaDifferenceFinder.Model.SQLStatements.MissingTables.DropTable);
您不需要泛型,只需要一个将命令文本作为参数的包装方法。
private void ExecuteNonQuery(string commandText, string connString)
{
using(OracleConnection myOracleConnection = new OracleConnection(connString))
{
myOracleConnection.Open();
OracleCommand command = myOracleConnection.CreateCommand();
command.CommandText = commandText;
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
}
}
注意使用using
语句以确保正确处理。
为什么不将代码放入一个带有字符串参数的方法中?像这样的东西?
/// <summary>
/// Executes the provided CommandText against the Oracle database.
/// </summary>
/// <param name="commandText">The command to execute</param>
/// <exception cref="ArgumentNullException">Thrown if an empty or null commandText is provided</exception>
private void ExecuteOracleTextCommand(string commandText)
{
if(string.IsNullOrWhiteSpace(commandText)
{
throw new ArgumentNullException("commandText", "Please provide a valid command");
}
//other commandText validation here...
OracleConnection myOracleConnection = new OracleConnection(connectionString);
myOracleConnection.Open();
OracleCommand command = myOracleConnection.CreateCommand();
command.CommandText = commandText;
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
myOracleConnection.Close();
}
然后你可以这样称呼它:
ExecuteOracleTextCommand(SchemaDifferenceFinder.Model.SQLStatements.MissingTables.DropTable);
如果您想对调用方的命令有更多的控制权,另一个答案是:
private delegate void CommandAction(OracleCommand command);
private static void ExecuteNonQuery(CommandAction action)
{
OracleConnection myOracleConnection = new OracleConnection(connectionString);
myOracleConnection.Open();
OracleCommand command = myOracleConnection.CreateCommand();
action(command);
command.ExecuteNonQuery();
myOracleConnection.Close();
}
这可以被称为以下方式:
Helper.ExecuteNonQuery(command =>
{
command.CommandText = SchemaDifferenceFinder.Model.SQLStatements.MissingTables.DropTable;
command.CommandType = System.Data.CommandType.Text;
});