【问题标题】:Generic database update method in c#c#中的通用数据库更新方法
【发布时间】:2015-04-10 19:02:55
【问题描述】:

我正在寻找一种方法,该方法能够更新数据库中的任何表,给定要更新的任意数量的列以及要查找的任意数量的字段(在哪里条款)。问题是我找不到能够做到这一点的这种功能的设计模式。我将如何发送参数?看起来我需要两个参数 [] 这是不可能的,并且发送查询字符串本身是不可能的。该方法应该能够处理任何这样的查询:

UPDATE [Table] SET [Col1] = 1, [Col2] = 2, ... WHERE [Col10] = 1 AND [Col11] = 2, ...

作为通用插入方法的示例,我使用了同一函数的多个重载,并使用不同的对象类型作为其参数。

public void Insert(Broadcast obj){...}
public void Insert(Comments obj){...}
public void Insert(Seated obj){...}

现在这很简单,因为根据对象的类型,我正在将取自对象 obj 的值插入到相应的数据库表中。想不出一个更新。

【问题讨论】:

  • 你为什么要这个?为什么不为每个表编写单独的插入语句,因为它们无论如何都会不同?
  • 并不是我会推荐您采用的方法,但如果必须,为什么不只传递类似 List 的东西,其中 MyColumnDefinition 包含列名称/值等?
  • 这正是为什么正常模式是每个不同的对象类型都应该有自己的数据访问对象 (DAO) 来对其执行 CRUD 操作的原因。
  • 您可以做的事情是一个抽象基对象,其中每个派生类中都实现一个抽象方法,并且只需 1 次插入该抽象基对象作为参数。然后,您可以调用抽象方法并通过多态每个对象将返回或做任何您想做的事情
  • @mason 我这样做了,sql 查询字符串到处都是。一团糟!我不喜欢它:)

标签: c# sql


【解决方案1】:

这是一个坏主意,但如果我不得不这样做,我可能会从这个类中向该方法发送一个对象:

class UpdateStatement {
    public string TableName {get;set}
    public Dictionary<DataColumn, object> SetColumns {get;set;} // the object is the value to be updated
    public Dictionary<DataColumn, object> WhereColumns {get;set;} // the object here is the value that the column will be tested against in the where clause. 
}

并让它返回更新语句的行数为 int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多