2012-04-25 36 views
4

有没有一种优雅的方式来编写一个插入语句,它有很多参数?我有20个标志需要保存在数据库中,还有其他需要插入的信息以及这20个标志。为该插入文件编写一个包含30个参数的方法是浪费时间,但到目前为止我还没有提出其他想法,这可能会奏效。有很多参数的c#sql插入

+1

以何种方式是它是“浪费时间”?这可能是一个难看的设计选择,但我不确定它是如何浪费时间的。 – 2012-04-25 14:18:08

+0

我认为你正在寻找一个ORM。如果可能,我会选择这个。 – 2012-04-25 14:25:06

+1

当你说“flags”时,你可能是指可以用'[Flags]枚举MyFlags {...}'表示的实现吗?如果是这样,你可以很容易地用一个变量来表示这20个标志。 – 2012-04-25 14:34:33

回答

6

您可以将所有这些参数放在一个对象中,并将该对象传递给该方法。

3

标准方法是创建一个表示您的实体的类,然后传递该类的一个实例。

这使得它很容易传递给其他方法,可以做验证,演示等,以及持久性。

+0

为什么downvote? – RedFilter 2012-04-25 16:47:04

1

同意萨钦,封装,你需要一个类的内部和

然后通过实例的数据层的SQL查询的进一步处理SqlParameters名单。

1

您可以创建一个表示可以插入到您的数据库中的对象类型的接口,例如公开诸如getFields之类的方法的Iinsertable。用那个,你创建实现这个接口的实体。

使用这些实体,在数据库层中,您可以创建一个接受Iinsertable作为参数的泛型方法,您可以查询所有要在循环中使用getFiels方法插入的字段。这会让你的代码对于每一种类型的实体都是可重用的,它会像地狱一样干净。

0

使用我的SqlBuilder类。它可以让你编写参数查询,而无需担心创建参数或他们被称为什么。

var bldr = new SqlBuilder(myCommand); 
bldr.Append("SELECT * FROM CUSTOMERS WHERE ID = ").Value(myId, SqlDbType.Int); 
//or 
bldr.Append("SELECT * FROM CUSTOMERS NAME LIKE ").FuzzyValue(myName, SqlDbType.NVarChar); 

只要你喜欢你可以有很多标志。每次要在查询中包含运行时值时,只需调用Value()。参数的创建是隐藏的,你只剩下一个整洁的SQL查询。

的SqlBuilder类的代码是here