加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 从.NET可以得到由SqlCommand工具天生的完备SQL字

发布时间:2021-02-24 23:09:53 所属栏目:编程 来源:网络整理
导读:从.NET情形中,我可以会见由 SqlCommand工具天生的完备SQL字符串吗? 留意:在调试模式下,完备的SQL字符串表现在VisualStudio中的Intellisense悬停中. 假如必需,我乐意行使反射技能.我信托这里有人知道一种要领来实现它. 更新1: 我正在挪器具有cmd.CommandTyp

从.NET情形中,我可以会见由 SqlCommand工具天生的完备SQL字符串吗?

留意:在调试模式下,完备的SQL字符串表现在VisualStudio中的Intellisense悬停中.

假如必需,我乐意行使反射技能.我信托这里有人知道一种要领来实现它.

更新1:
我正在挪器具有cmd.CommandType = CommandType.StoredProcedure参数的存储进程,而且我正在实行获取天生并运行的完备SQL.
我想知道cmd.Prepare()要领在这种环境下是否有效,假如它也许将完备的字符串存储在状态字段或相同的对象中.

更新2:

按照下面的谜底(和引用)表白在筹备或执行进程中没有内部天生完备的SQL字符串,我做了一些行使.NET Reflector.纵然是内部毗连类好像也会转达工具而不是将它们归结为字符串,譬喻:

内部抽象void AddPreparedCommand(SqlCommand cmd);
声明范例:System.Data.SqlClient.SqlInternalConnection
汇编:System.Data,Version = 2.0.0.0

总的来说,感激每小我私人的细节程度,以证明可以做什么,并展示现实产生的工作.很是谢谢.我喜好彻底的表明;他们增进了担保,并为谜底提供了信赖.

办理要领

一个简朴的轮回用它们的值替代全部参数名称将为您提供相同于最终功效的对象,可是有几个题目.

>因为SQL现实上从未行使参数值举办重建,因此不必要思量换行和引号等内容
>注释中的参数名称从不现实处理赏罚其值,而是保持原样

有了这些参数,并思量了以沟通字符开头的参数名称,如@NAME和@NAME_FULL,我们可以将全部参数名称替代为该参数地址的值:

string query = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters.OrderByDescending(p => p.ParameterName.Length))
{
    query = query.Replace(p.ParameterName,p.Value.ToString());
}

可是,尚有一个题目,那就是假如参数是一个字符串,那么SQL最初看起来像这样:

SELECT * FROM yourtable WHERE table_code = @CODE

将如下所示:

SELECT * FROM yourtable WHERE table_code = SOME CODE WITH SPACES

这显然不是正当的SQL,以是我们也必要思量一些参数范例:

DbType[] quotedParameterTypes = new DbType[] {
    DbType.AnsiString,DbType.Date,DbType.DateTime,DbType.Guid,DbType.String,DbType.AnsiStringFixedLength,DbType.StringFixedLength
};
string query = cmd.CommandText;

var arrParams = new SqlParameter[cmd.Parameters.Count];
cmd.Parameters.CopyTo(arrParams,0);

foreach (SqlParameter p in arrParams.OrderByDescending(p => p.ParameterName.Length))
{
    string value = p.Value.ToString();
    if (quotedParameterTypes.Contains(p.DbType))
        value = "'" + value + "'";
    query = query.Replace(p.ParameterName,value);
}

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读