C# 为什么在C中创建表时收到不正确的语法错误#
我正在尝试创建一个表格,其标题是从CSV文件中读取的:C# 为什么在C中创建表时收到不正确的语法错误#,c#,sql,csv,C#,Sql,Csv,我正在尝试创建一个表格,其标题是从CSV文件中读取的: myConnection = new SqlConnection(cString); myConnection.Open(); var lines = File.ReadLines(textBox1.Text); List<string> readHeader = lines.ElementAt(0).Split(',').ToList(); string tab = "a123CSV"; readHeader.ToArray
myConnection = new SqlConnection(cString);
myConnection.Open();
var lines = File.ReadLines(textBox1.Text);
List<string> readHeader = lines.ElementAt(0).Split(',').ToList();
string tab = "a123CSV";
readHeader.ToArray();
string exists = null;
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + tab + "'", myConnection);
exists = cmd.ExecuteScalar().ToString();
}
catch (Exception ce)
{
exists = null;
}
if (exists == null)
{
int p;
for (p = 0; p <= readHeader.Count; p++)
{
if (exists == null)
{
SqlCommand createTable = new SqlCommand("CREATE TABLE '" + tab + "' ([" + readHeader[p] + "] varchar(MAX))", myConnection);
createTable.ExecuteNonQuery();
exists = tab;
}
else
{
SqlCommand addcolumn = new SqlCommand("ALTER TABLE '" + tab + "' ADD [" + readHeader[p] + "] varchar(MAX)", myConnection);
addcolumn.ExecuteNonQuery();
}
}
}
错误:
Incorrect syntax near `a123CSV`
如何解决此错误?您需要使用
[
和]
来转义表名,而不是单引号,即:
"CREATE TABLE [" + tab + "] ([" + readHeader[p].Replace("\"", "") + "] varchar(MAX))"
这是因为您将表名称括在单引号内。用这个,
SqlCommand createTable = new SqlCommand("CREATE TABLE " + tab + " ([" + readHeader[p].Replace("\"", "") + "] varchar(MAX))", myConnection);
首先要解决的问题是:停止将值直接嵌入SQL。使用参数化SQL。这可能足以让其他错误变得更加明显。。。同时也修复了SQL注入攻击漏洞。一旦查询成功,我将使用参数:)谢谢您的帮助feedback@JonSkeet参数化查询是否能够动态指定要创建的表的名称?我认为这不是他们可以执行的有效任务。@Servy:不是那个位,不是-但是除了表名之外还有一些代码需要修复。@SearchForkKnowledge:您应该从一开始就养成使用参数化查询的习惯。这就像说“在我完成之前,我不会麻烦格式化我的代码或使用有意义的变量名。”我将用
[]
替换单引号,以防用户提供的表名有空格。@SearchForKnowledge,直到用户输入表名];删除表sysobjects;--代码>我在文本框中使用过滤器,以确保只允许字母和数字,并且只允许字母作为第一个字符。:)我错了,我不是那样看的。谢谢:)@SearchForKnowledge:没问题,很乐意帮忙。
SqlCommand createTable = new SqlCommand("CREATE TABLE " + tab + " ([" + readHeader[p].Replace("\"", "") + "] varchar(MAX))", myConnection);