C# 在ado.net中将查询中的动态表名和列名作为sql参数传递

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

目标:防止SQL注入

我想从select查询中动态传递列名和表名

考虑以下方法:

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视频让你开始。