仿Linq to Sql将 SQL 语句转换成参数化 SQL 语句

使用过linq to sql的都知道LINQ to SQL 可以将查询转换成参数化 SQL 查询(以文本形式),然后将它们发送至 SQL 服务器进行处理。

例如执行一个insert语句:

QQ截图未命名

刚开始我以为它是直接把值传入即可,其实不然,看一下生成的sql语句就知道了:

 QQ截图未命名1

很是方便,我们不用自己手动设置SqlParameter参数,只用传入实际的值即可,并且这样参数化的sql语句也很安全。

但是回想起我平时使用的直接执行sql语句的代码,其中少不了的一步就是设置SqlParameter参数,很是烦人,尤其是做insert操作的使用,字段多的话,更是恼火。于是突发奇想能不能封住一个方法模仿LINQ to SQL自动将的查询转换成参数化 SQL 查询呢?

首先确定方法的签名

 

public static SqlCommand GetSqlStringCommandAndSetValue(this Database dataBase, string formatSqlString, params object[] parameterValues)

 

这是一个扩展方法而已,没什么其他特别之处

现在最重要的是怎么转换为参数化的SQL语句,以及设置SqlParameter

整合代码很简单,也没有想到好的方法,以至于看起来有些丑陋,不过还是可以使用

public static SqlCommand GetSqlStringCommandAndSetValue(this Database dataBase, string formatSqlString, 
params object[] parameterValues)
{
string[] parameters = new string[parameterValues.Length];
for (int i = 0; i < parameterValues.Length; i++)
{
parameters[i] = "@p" + i.ToString();
}
SqlCommand command = dataBase.GetSqlStringCommand(string.Format(formatSqlString, parameters)) as SqlCommand;

for (int i = 0; i < parameterValues.Length; i++)
{

dataBase.AddInParameter(command, "@p" + i.ToString(),
SqlMetaData.InferFromValue(parameterValues[i], "@p" + i.ToString()).DbType, parameterValues[i]);
}
return command;
}

这个方法中要注意的一个方法是就是 SqlMetaData.InferFromValue方法,它可以把System.Type类型转化为SqlDbType,其他也没有什么高深的地方。

哈哈,有了这个方法我们就不用一个一个的设置SqlParameter了,只是使用的时候注意参数的顺序,这点约定好就是了。

看看以前代码片段:

 

DbCommand command = _db.GetSqlStringCommand("Delete from Question_Marked where UserID=@CurrUserID and QID=@QID");
_db.AddInParameter(command, "@QID", qID);
_db.AddInParameter(command, "@CurrUserID", currUserID);

 

再来看看有个上面的方法之后的代码片段吧:

DbCommand command = _db.GetSqlStringCommandAndSetValue(@"Delete from Question_Marked where UserID={0} and QID={1}", currUserID, qID);

 

是不是和Linq to Sql 中执行sql语句看起来一样了,使用也方便了,实质上也参数化了Sql语句。

转载于:https://www.cnblogs.com/dushouke/archive/2009/08/18/1549358.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值