求一个更新记录的通用方法。

number1170196649 2012-08-06 05:18:38
我们在插入数据的时候可以使用像Add(Model model)这样的方法,但是在更新数据的时候就不得不对写对应修改字段的SQL语句。能够有一个通用的方法修改实体类中的某个字段或者某几个字段的值?现在我有个想法,定义一个Update(Model model,param string[] paras)其中paras为需要修改的字段。怎么可以再方法里面得到相应的修改语句。如:update table set paras[0]=@paras……?等等。再new Parameter("@"+paras[0]).value=model.paras[0]这样的形式?希望大家赐教!
...全文
145 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
number1170196649 2012-08-06
  • 打赏
  • 举报
回复
这个存储过程具体怎么用呢?有没有相关的例子?[Quote=引用 5 楼 的回复:]
我之前写的,该下就可以用

SQL code
create proc Validated
(
@tablename varchar(200), --表名
@updateString varchar(1000), --更改的字段
@whereString varchar(1000) --根据什么字段更改
)
as
begin
declare @sql varchar(20……
[/Quote]
number1170196649 2012-08-06
  • 打赏
  • 举报
回复
这样不是多了一次数据库查询吗?我们的原则不是尽可能少的和数据库交互吗?[Quote=引用 4 楼 的回复:]
上面写我我一般都是先查询出
在查出来的基础 上赋值
然后在更新。这样就不会出错不管EF还是ADO.NET我都这样做的。。不懂好不好。。
[/Quote]
魏飞翔 2012-08-06
  • 打赏
  • 举报
回复
我之前写的,该下就可以用
create proc Validated
(
@tablename varchar(200), --表名
@updateString varchar(1000), --更改的字段
@whereString varchar(1000) --根据什么字段更改
)
as
begin
declare @sql varchar(2000) --定义sql变量
set @sql='Update '+@tablename+' set '+@updateString+'=-('+@updateString+'-1)'+' where '+@whereString
print @sql
exec(@sql)
end
杰拉尔 2012-08-06
  • 打赏
  • 举报
回复
上面写我我一般都是先查询出
在查出来的基础 上赋值
然后在更新。这样就不会出错不管EF还是ADO.NET我都这样做的。。不懂好不好。。
number1170196649 2012-08-06
  • 打赏
  • 举报
回复
以上的封装好的那个DALHelper类可以代替三层架构当中的DAL层,只需要每个数据表或视图继承DALHelper就可以,不用编写其他复杂的语句。就可以实现增删改了。
number1170196649 2012-08-06
  • 打赏
  • 举报
回复
        /// <summary>
/// 更新一条数据
/// </summary>
public string Update(Object obj)
{
string sProperty = "";
string tmpTableName = "";
StringBuilder strSql = new StringBuilder();
try
{
Type type = obj.GetType();
SqlParameter[] parameters = new SqlParameter[type.GetProperties().GetLength(0) - 1];
int i = 0;
foreach (PropertyInfo info in type.GetProperties())
{
if (info.Name == "sTableName")
{
tmpTableName = info.GetValue(obj, null) + "";
continue;
}
if (info.Name != "ID")
sProperty += info.Name + "=@" + info.Name + ",";
string sObjProperty = info.PropertyType + "";
string sObjValue = info.GetValue(obj, null) + "";
string sDataType = getDataType(sObjProperty, sObjValue);
parameters[i] = new SqlParameter("@" + info.Name, sDataType);
parameters[i].Value = sObjValue;
i++;
}
sProperty = sProperty.Substring(0, sProperty.Length - 1);

if (tmpTableName == "") tmpTableName = sTableName;
strSql.Append("update " + tmpTableName + " set ");
strSql.Append(sProperty);
strSql.Append(" where ID=@ID");
DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
return strSql.ToString();
}
catch
{
return strSql.ToString();
}
}


它用到了反射,这个可以考虑。请问考虑到效率问题,这种实行可行吗?现在用起来可以少编写很多代码!但本人觉得不如直接写SQL语句使用DbHelperSQL这么直接高效!
number1170196649 2012-08-06
  • 打赏
  • 举报
回复
/// <summary>
/// 更新一条数据
/// </summary>
public string Update(Object obj)
{
string sProperty = "";
string tmpTableName = "";
StringBuilder strSql = new StringBuilder();
try
{
Type type = obj.GetType();
SqlParameter[] parameters = new SqlParameter[type.GetProperties().GetLength(0) - 1];
int i = 0;
foreach (PropertyInfo info in type.GetProperties())
{
if (info.Name == "sTableName")
{
tmpTableName = info.GetValue(obj, null) + "";
continue;
}
if (info.Name != "ID")
sProperty += info.Name + "=@" + info.Name + ",";
string sObjProperty = info.PropertyType + "";
string sObjValue = info.GetValue(obj, null) + "";
string sDataType = getDataType(sObjProperty, sObjValue);
parameters[i] = new SqlParameter("@" + info.Name, sDataType);
parameters[i].Value = sObjValue;
i++;
}
sProperty = sProperty.Substring(0, sProperty.Length - 1);

if (tmpTableName == "") tmpTableName = sTableName;
strSql.Append("update " + tmpTableName + " set ");
strSql.Append(sProperty);
strSql.Append(" where ID=@ID");
DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
return strSql.ToString();
}
catch
{
return strSql.ToString();
}
}

这个是一个通用的方法,但是更新时是所有字段一起更新的。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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