gpt4 book ai didi

c# - SQL参数没有被替换

转载 作者:行者123 更新时间:2023-11-30 13:58:29 24 4
gpt4 key购买 nike

我正在尝试根据 csv 文件在我的数据库中创建一个新表。因为我不知道 csv 文件中有哪些列,所以我在运行时创建了一个 SqlCommand。这是我目前所拥有的。

public static void AddTableFromFile(string file)
{
DefaultContext dbContext = DefaultContext.GetInstance();
DbProviderFactory dbFactory = DbProviderFactories.GetFactory(dbContext.Database.Connection);

SqlCommand createTable = new SqlCommand();
createTable.Connection = (SqlConnection)dbContext.Database.Connection;

//Get all the fields from the file.
TextReader reader = File.OpenText(file);
string head = reader.ReadLine();
reader.Close();
head = head.Replace('\"', ' ');

//Build the column paramaters for the Sql query.
string[] fields = head.Split(',');
if (fields.Length == 0)
throw new Exception("No data to process; " + file);
StringBuilder columnsBuilder = new StringBuilder();
for (int i = 0; i < fields.Count(); i++)
{
columnsBuilder.Append("@column" + i + " char(25), ");
createTable.Parameters.AddWithValue("@column" + i, fields[i]);
}
//Make the first field the primary key.
columnsBuilder.Append("PRIMARY KEY(@column0)");

createTable.Parameters.AddWithValue("@tableName", Path.GetFileNameWithoutExtension(file));

createTable.CommandText = "CREATE TABLE @tableName (" + columnsBuilder.ToString() + ")";

dbContext.Database.Connection.Open();
createTable.ExecuteNonQuery();
dbContext.Database.Connection.Close();

DefaultContext.Release();
Logger.Log("Table " + Path.GetFileNameWithoutExtension(file) + " added to the database.");
}

但是每次运行时我都会收到一个 SqlException 告诉我@tableName 周围存在语法错误。我通过将原始值放入字符串中尝试了同样的命令,所以我知道它有效。我在这里遗漏了什么明显的东西吗?

为了以防万一,我正在使用 MVC 4,我相信数据库是 Sql Server Express 或与 Visual Studio 2012 捆绑在一起的任何一个。

最佳答案

Am I missing something obvious here?

不幸的是,我认为您遗漏了不受支持的内容。虽然 可以参数化,但据我所知,大多数数据库(包括 SQL 服务器)不允许对表名甚至字段名进行参数化。

所以基本上,如果您真的需要能够接受字段等作为用户输入,您需要完成所有 super 的工作 - 注意接受的字符,转义值等 - 然后直接将其放入 SQL。

关于c# - SQL参数没有被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16679815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com