C# 要在from子句中使用的OleDb参数

C# 要在from子句中使用的OleDb参数,c#,.net,csv,oledb,C#,.net,Csv,Oledb,我有以下代码来读取CSV文件并填充数据表: string sql = @"SELECT * FROM [" + fileName + "]"; using (OleDbConnection connection = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Pro

我有以下代码来读取CSV文件并填充数据表:

string sql = @"SELECT * FROM [" + fileName + "]";

        using (OleDbConnection connection = new OleDbConnection(
                  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
                  ";Extended Properties=\"Text;HDR=" + header + "\""))
        {
            using (OleDbCommand command = new OleDbCommand(sql, connection))
            {
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                {
                    DataTable dataTable = new DataTable();
                    dataTable.Locale = CultureInfo.CurrentCulture;
                    adapter.Fill(dataTable);
                    return dataTable;
                }
            }
        }
这个被剪掉的代码效果很好,但代码分析对此表示不满()。应该更改生成查询字符串的方式,以便使用参数

我正试图解决这个问题,但通常的OLEDB参数用法似乎不起作用。查询是使用参数名称而不是其值生成的:

            string sql = @"SELECT * FROM @param";

        using (OleDbConnection connection = new OleDbConnection(
                  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
                  ";Extended Properties=\"Text;HDR=" + header + "\""))
        {
            using (OleDbCommand command = new OleDbCommand(sql, connection))
            {
                command.Parameters.Add(new OleDbParameter("@param", fileName));
                using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                {
                    DataTable dataTable = new DataTable();
                    dataTable.Locale = CultureInfo.CurrentCulture;
                    adapter.Fill(dataTable);
                    return dataTable;
                }
            }
        }

有什么想法吗

代码分析并非无所不知。此查询只能动态生成,因为查询的
FROM
部分无法参数化。抑制警告--您确实“查看了查询中的安全漏洞”。(您可能需要再次检查如何转义文件名,尽管--
[
]
是合法字符,因此至少需要转义
]
。我不确定喷气式飞机驾驶员的规则。)通常情况下,表名不允许作为参数使用,您可以看到链接。我认为要使用参数,您需要将它们传递到存储过程中。