Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在C中创建表时收到不正确的语法错误#_C#_Sql_Csv - Fatal编程技术网

C# 为什么在C中创建表时收到不正确的语法错误#

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

我正在尝试创建一个表格,其标题是从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();
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);