如何在 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 命令文本的主要内容,如果未能解决你的问题,请参考以下文章
如何在eclipse中使用mvn clean install
如何在优雅地保存在 Django 1.5 之前使用 full_clean() 进行数据验证?
如何在 SpringBoot 应用程序迁移之前运行 flyway:clean?