怎么写能够通用的更新数据库方法

jiangtianyin 2009-11-22 08:12:01
数据库中有多个表(c#语言)
更新数据库中的内容时,通常语句是 update TableName set 列名1=值1,列名2=值2,.....where 条件1 and 条件2......
我要更新的字段是不确定的,可能只有一个(各字段的数据类型也不确定),可能有多个,更新的条件也是不定的,我想构造一个通用的更新方法,表名通过参数指定,要更新的字段、值和条件也用参数传递,这种方法能实现吗?
我想过用数组,但是最主要的问题就是字段的数据类型不确定
...全文
86 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
马老虎 2009-11-23
  • 打赏
  • 举报
回复
学习BD
mohugomohu 2009-11-23
  • 打赏
  • 举报
回复
反射。看看Hibernate就知道了

我的示例:http://www.heyant.com/html/Download49.html
cntracker 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhujiazhi 的回复:]
用反射可以达到的,
所有类的都继承自BaseModel的,如下一个insert语句
public string GetInsertQuery(BaseModel model, string tableName)
        {
            List <string> fields = new List <string>();
            foreach (PropertyInfo pi in model.GetType().GetProperties())
            {
                fields.Add(pi.Name);
            }
            StringBuilder query = new StringBuilder("insert into " + tableName + "(");
            StringBuilder value = new StringBuilder(" values(");
            int index = 0;
            int count = fields.Count;
            foreach (string key in fields)
            {               
                query.Append(key);
                value.Append(prikey + key);
                if (index < count - 1)
                {
                    query.Append(",");
                    value.Append(",");
                }
                ++index;
            }
            query.Append(")");
            value.Append(")");
            return query.ToString() + value.ToString();
        }
[/Quote]

刚开始学习,不知道怎么用,
3楼的大侠说的不是太明白,再直接一些吧。大家都是生手
智商无下限 2009-11-22
  • 打赏
  • 举报
回复
这个问题10分,我就不说了。
hlp912 2009-11-22
  • 打赏
  • 举报
回复
楼上的二位,可否给个实例,谢谢
zhujiazhi 2009-11-22
  • 打赏
  • 举报
回复
用反射可以达到的,
所有类的都继承自BaseModel的,如下一个insert语句
public string GetInsertQuery(BaseModel model, string tableName)
{
List<string> fields = new List<string>();
foreach (PropertyInfo pi in model.GetType().GetProperties())
{
fields.Add(pi.Name);
}
StringBuilder query = new StringBuilder("insert into " + tableName + "(");
StringBuilder value = new StringBuilder(" values(");
int index = 0;
int count = fields.Count;
foreach (string key in fields)
{
query.Append(key);
value.Append(prikey + key);
if (index < count - 1)
{
query.Append(",");
value.Append(",");
}
++index;
}
query.Append(")");
value.Append(")");
return query.ToString() + value.ToString();
}
kinglshadow 2009-11-22
  • 打赏
  • 举报
回复
三层架构不是可以解决这个问题吗?你在model曾里面写对应表的get set方法,然后传递参数的时候,就调用model层方法set你需要传递的参数,然后传model中class的引用就OK了
wuyq11 2009-11-22
  • 打赏
  • 举报
回复
看看sqlhelper。使用反射或liSt<T>泛型保存

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧