栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从SqlCommand对象获取生成的SQL语句?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从SqlCommand对象获取生成的SQL语句?

虽然不是很完美,但是我为TSQL提出了一些建议-可以很容易地对其进行其他调整…如果没有其他选择,它将为您提供自己的改进起点:)

这样就可以对数据类型和输出参数等执行确定的工作,类似于在SSMS中使用“执行存储过程”。我们主要使用SP,因此“文本”命令不考虑参数等

    public static String ParameterValueForSQL(this SqlParameter sp)    {        String retval = "";        switch (sp.SqlDbType)        { case SqlDbType.Char: case SqlDbType.NChar: case SqlDbType.NText: case SqlDbType.NVarChar: case SqlDbType.Text: case SqlDbType.Time: case SqlDbType.VarChar: case SqlDbType.Xml: case SqlDbType.Date: case SqlDbType.DateTime: case SqlDbType.DateTime2: case SqlDbType.DateTimeOffset:     retval = "'" + sp.Value.ToString().Replace("'", "''") + "'";     break; case SqlDbType.Bit:     retval = (sp.Value.ToBooleanOrDefault(false)) ? "1" : "0";     break; default:     retval = sp.Value.ToString().Replace("'", "''");     break;        }        return retval;    }    public static String CommandAsSql(this SqlCommand sc)    {        StringBuilder sql = new StringBuilder();        Boolean FirstParam = true;        sql.AppendLine("use " + sc.Connection.Database + ";");        switch (sc.CommandType)        { case CommandType.StoredProcedure:     sql.AppendLine("declare @return_value int;");     foreach (SqlParameter sp in sc.Parameters)     {         if ((sp.Direction == ParameterDirection.InputOutput) || (sp.Direction == ParameterDirection.Output))         {  sql.Append("declare " + sp.ParameterName + "t" + sp.SqlDbType.ToString() + "t= ");  sql.AppendLine(((sp.Direction == ParameterDirection.Output) ? "null" : sp.ParameterValueForSQL()) + ";");         }     }     sql.AppendLine("exec [" + sc.CommandText + "]");     foreach (SqlParameter sp in sc.Parameters)     {         if (sp.Direction != ParameterDirection.ReturnValue)         {  sql.Append((FirstParam) ? "t" : "t, ");  if (FirstParam) FirstParam = false;  if (sp.Direction == ParameterDirection.Input)      sql.AppendLine(sp.ParameterName + " = " + sp.ParameterValueForSQL());  else      sql.AppendLine(sp.ParameterName + " = " + sp.ParameterName + " output");         }     }     sql.AppendLine(";");     sql.AppendLine("select 'Return Value' = convert(varchar, @return_value);");     foreach (SqlParameter sp in sc.Parameters)     {         if ((sp.Direction == ParameterDirection.InputOutput) || (sp.Direction == ParameterDirection.Output))         {  sql.AppendLine("select '" + sp.ParameterName + "' = convert(varchar, " + sp.ParameterName + ");");         }     }     break; case CommandType.Text:     sql.AppendLine(sc.CommandText);     break;        }        return sql.ToString();    }

沿这些行生成输出…

use dbMyDatabase;declare @return_value int;declare @OutTotalRows   BigInt  = null;exec [spMyStoredProc]    @InEmployeeID = 1000686    , @InPageSize = 20    , @InPage = 1    , @OutTotalRows = @OutTotalRows output;select 'Return Value' = convert(varchar, @return_value);select '@OutTotalRows' = convert(varchar, @OutTotalRows);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号