如何在 clean 中读取 SqlDataAdapter 命令文本

Posted

技术标签:

【中文标题】如何在 clean 中读取 SqlDataAdapter 命令文本【英文标题】:How to read the SqlDataAdapter command text in clean 【发布时间】:2016-11-19 12:27:23 【问题描述】:

这是我的图片:How to read the SqlDataAdapter command text in clean

我可以知道如何以纯文本形式阅读 SqlDataAdapter 命令文本。 示例:

SELECT * FROM tbl_Video WHERE VideoName=@VideoName

我想知道我只是以纯文本形式传递的参数值,因为我想将带有参数值的整个 SQL 语句存储到日志文件表中。我使用参数的目的是因为我想避免 SQL 注入。

【问题讨论】:

【参考方案1】:

这是我用来从 mysql 数据库获取数据的方法。 ex) string q = "SELECT ID FROM Users WHERE Username=chris"; 字符串 id = dbGetData(q); //用户id

 public static String dbGetData(String q)
    
        openConnection(); //opens connection if closed
        try
        
            SqlCommand cmd = new SqlCommand(q, connection);
            return cmd.ExecuteScalar().ToString();
        
        catch (Exception)
        
        
        return null;
    

【讨论】:

嗨,克里斯,谢谢你的回答。这条 SQL 语句不是很容易受到 SQL 注入攻击吗? @TiongGor 哦,我不确定。如果有人能告诉我这是不是真的,那就太好了【参考方案2】:

我不知道有一个内置的方法,但是下面的辅助函数可以达到目的:

private static string GetSqlCommandTextForLogs(SqlCommand cmd)

    string text = cmd.CommandText;
    foreach (SqlParameter parameter in cmd.Parameters)
    
        text = text.Replace("@"+parameter.ParameterName, parameter.Value.ToString());
    
    return text;

SqlDataAdapter 上的 SelectCommand 属性是 SqlCommand 类型,可以传递给这样的帮助程序以获取您正在寻找的适合日志的文本。

【讨论】:

【参考方案3】:

您可以使用 SqlCommandBuilder 执行此操作,并从命令中获取 CommandText。

例子:

   using(SqlConnection connection = new SqlConnection("YOUR CONNECTION"))
   
      connection.Open();
      SqlDataAdapter thisAdapter = new SqlDataAdapter("SELECT ID from SOMETABLE", connection);

      SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);

      Console.WriteLine("SQL SELECT Command is:\n0\n", thisAdapter.SelectCommand.CommandText);

      SqlCommand updateCommand = thisBuilder.GetUpdateCommand();
      Console.WriteLine("SQL UPDATE Command is:\n0\n", updateCommand.CommandText);

      SqlCommand insertCommand = thisBuilder.GetInsertCommand();
      Console.WriteLine("SQL INSERT Command is:\n0\n", insertCommand.CommandText);

      SqlCommand deleteCommand = thisBuilder.GetDeleteCommand();
      Console.WriteLine("SQL DELETE Command is:\n0", deleteCommand.CommandText);
   

【讨论】:

以上是关于如何在 clean 中读取 SqlDataAdapter 命令文本的主要内容,如果未能解决你的问题,请参考以下文章

SVN中如何执行clean up

如何在eclipse中使用mvn clean install

如何在优雅地保存在 Django 1.5 之前使用 full_clean() 进行数据验证?

如何在 SpringBoot 应用程序迁移之前运行 flyway:clean?

IntelliJ IDEA教程之如何clean或者install Maven项目

如何防止在 make clean 上运行 qmake?