Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有大量参数的c#sql插入_C#_Sql_Winforms - Fatal编程技术网

带有大量参数的c#sql插入

带有大量参数的c#sql插入,c#,sql,winforms,C#,Sql,Winforms,有没有一种优雅的方法来编写包含大量参数的insert语句?我有20个需要保存在DB中的标志,加上其他需要插入的信息,以及这20个标志。为该插入编写一个包含30个参数的方法是浪费时间,但到目前为止,我还没有想到其他可行的方法。您可以将所有这些参数放在一个对象中,然后将该对象传递给该方法。标准方法是创建一个表示实体的类,然后传递该类的实例 这使得传递给其他可能进行验证、表示等以及持久性的方法变得很容易。同意Sachin的观点,将您需要的SqlParameters列表封装在类中,然后 然后将实例传递给

有没有一种优雅的方法来编写包含大量参数的insert语句?我有20个需要保存在DB中的标志,加上其他需要插入的信息,以及这20个标志。为该插入编写一个包含30个参数的方法是浪费时间,但到目前为止,我还没有想到其他可行的方法。

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

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


这使得传递给其他可能进行验证、表示等以及持久性的方法变得很容易。

同意Sachin的观点,将您需要的SqlParameters列表封装在类中,然后


然后将实例传递给数据层,以便进一步处理SQL查询。

您可以创建一个接口,该接口表示可以插入到数据库中的对象类型,如Iinsertable,该接口公开了getFields等方法。这样,就可以创建实现此接口的实体


有了这些实体,您可以在数据库层中创建一个通用方法,该方法接受Iinsertable作为参数,您可以查询要在循环中使用getFiels方法插入的所有字段。这将使您的代码对每种类型的实体都可重用,而且非常干净。

使用我的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类的代码是

,在什么方面是“浪费时间”?这可能是一个丑陋的设计选择,但我不确定这是如何浪费时间。我想你正在寻找一个ORM。如果可能的话,我会选择这个。当你说“flags”时,你是否可能是指一个可以用
[flags]enum MyFlags{…}
表示的实现?如果是这样的话,你可以很容易地用一个变量来表示这20个标志。我所说的标志是一个bool变量,不,它们将被单独存储,我不能生成一个变量。听起来你可以使用enum标志来完成你想要的。它是要传递的单个参数。存在true标志,而不是false标志。但是,这确实意味着您必须为按位操作添加更多逻辑来构造和解构参数。读一遍。