【发布时间】:2015-07-31 19:22:14
【问题描述】:
你好,假设我有一个 C# 代码
private const string INSERT = "INSERT INTO Person VALUES (@FirstName, @LastName)";
public static DbCommand INSERTCOMMAND(IPerson person)
{
DbCommand command = null;
var sqlParams = new List<DbParameter>();
if(SQLManagerFactory.SQLManager is SQLServerManager)
{
command = new SqlCommand(INSERT);
sqlParams.Add(new SqlParameter("@FirstName", person.FirstName);
sqlParams.Add(new SqlParameter("@LastName", person.LastName);
}
else // SQLiteManager
{
command = new SQLiteCommand(INSERT);
sqlParams.Add(new SQLiteParameter("@FirstName", person.FirstName);
sqlParams.Add(new SQLiteParameter("@LastName", person.LastName);
}
command.Parameters.AddRange(sqlParams.ToArray());
return command;
}
效果很好。当然,在我的生产代码中,它更大,并且有更多的位置可以为不同的命令执行类似的操作。
我的问题是有没有办法让这个更短?除了调用不同的构造函数之外,我不希望复制和粘贴基本上做同样事情的代码。
非常感谢您。
【问题讨论】:
-
我对SQL Lite不太了解,但单独做一个过程并调用它们
-
创建一个自定义类来处理计数的参数和循环的传递
-
在您的 InsertCommand 上使用 Facade 模式和/或将参数创建包装到类似 (CreateParam) 的位置并在那里检查。
-
使用许多 ORM-DAO 包装器之一可以简化编写此类跨供应商代码。
标签: c# sql .net sql-server sqlite