sql-server – 从.NET可以得到由SqlCommand工具天生的完备SQL字
从.NET情形中,我可以会见由 SqlCommand工具天生的完备SQL字符串吗? 留意:在调试模式下,完备的SQL字符串表现在VisualStudio中的Intellisense悬停中. 假如必需,我乐意行使反射技能.我信托这里有人知道一种要领来实现它. 更新1: 更新2: 按照下面的谜底(和引用)表白在筹备或执行进程中没有内部天生完备的SQL字符串,我做了一些行使.NET Reflector.纵然是内部毗连类好像也会转达工具而不是将它们归结为字符串,譬喻: 内部抽象void AddPreparedCommand(SqlCommand cmd); 总的来说,感激每小我私人的细节程度,以证明可以做什么,并展示现实产生的工作.很是谢谢.我喜好彻底的表明;他们增进了担保,并为谜底提供了信赖. 办理要领一个简朴的轮回用它们的值替代全部参数名称将为您提供相同于最终功效的对象,可是有几个题目.>因为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); } (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |