C# 在ado.net中将查询中的动态表名和列名作为sql参数传递
目标:防止SQL注入 我想从select查询中动态传递列名和表名 考虑以下方法:C# 在ado.net中将查询中的动态表名和列名作为sql参数传递,c#,ado.net,dynamic-sql,C#,Ado.net,Dynamic Sql,目标:防止SQL注入 我想从select查询中动态传递列名和表名 考虑以下方法: public bool PassColumnTableDynamic(string columnName, string tableName) { string commandText = string.Format(select {0} from {1}, columnName, tableName); try { using (var command = new
public bool PassColumnTableDynamic(string columnName, string tableName)
{
string commandText = string.Format(select {0} from {1}, columnName, tableName);
try
{
using (var command = new SqlCommand(commandText, _connection))
{
command.ExecuteScalar();
}
}
catch (Exception ex)
{
throw new Exception("error",ex);
}
return true;
}
commandText易受SQL注入攻击。我怎样才能防止呢
我的解决方案是创建一个存储过程,并将其作为此方法的参数传递。但我不想创建存储过程
C代码中有什么可以修复的吗?如果用户不能直接输入这些名称,只需像您那样插入它们即可
否则没有直接的方式,考虑使用正则表达式[^ [AZ-Z] ** $,因此用户只能插入文本
如果用户不能直接输入这些名称,只需像你这样输入……/P>
否则没有直接的方式,考虑使用正则表达式[^ [AZ-Z] ** $,所以用户只能插入文本
这是否回答了你的问题?[我应该如何将表名传递到存储过程?]或者更具体地说,不,我不想创建存储过程。如果您希望安全地创建存储过程,那么您就是这样做的。您必须决定是否不希望使用存储过程而不是希望代码安全。这是否回答了您的问题?[我应该如何将表名传递到存储过程?]或者更具体地说,不,我不想创建存储过程。如果您希望安全地创建存储过程,那么您就是这样做的。您必须决定是否不希望使用存储过程而不是希望代码安全。您可能需要查看Nuget软件包Dapper。它使数据库访问变得更容易,并解决了您的问题。一个叫Tim Corey的家伙有一个很棒的YouTube视频让你开始。你可能想看看Nuget软件包的简洁。它使数据库访问变得更容易,并解决了您的问题。一个叫Tim Corey的家伙有一个很棒的YouTube视频让你开始。