为什么varchar附近的语法不正确

Sea*_*dge 0 c# sql sql-server csv

我正在读取CSV文件,然后写入SQL表.我在使用以下代码写入之前即时创建表:

string exists = null;

try
{
    SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + tbTable.Text + "'", myConnection);
    exists = cmd.ExecuteScalar().ToString();
}
catch (Exception exce)
{
    exists = null;
}

if (exists == null)
{
   foreach (DataColumn dc in dt.Columns)
   {
      if (exists == null)
      {
         SqlCommand createtable = new SqlCommand("CREATE TABLE " + tbTable.Text + " (" + dc.ColumnName + " varchar(MAX))", myConnection);
         createtable.ExecuteNonQuery();
         exists = tbTable.Text;
      }
      else
      {
         SqlCommand addcolumn = new SqlCommand("ALTER TABLE " + tbTable.Text + " ADD " + dc.ColumnName + " varchar(MAX)", myConnection);
         addcolumn.ExecuteNonQuery();
      }
   }

   using (SqlBulkCopy bulkCopy = new SqlBulkCopy(myConnection))
   {
       try
       {
           bulkCopy.DestinationTableName = tbTable.Text;
           bulkCopy.WriteToServer(dt);
           tbTable.Enabled = true;
       }
       catch (Exception ex)
       {
          MessageBox.Show(ex.Message.ToString(), "Program Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          tbTable.Enabled = true;
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

我一直收到以下错误:

SqlException未处理:'varchar'附近的语法不正确

在以下几行:

SqlCommand addcolumn = new SqlCommand("ALTER TABLE " + tbTable.Text + " ADD " + dc.ColumnName + " varchar(MAX)", myConnection);
addcolumn.ExecuteNonQuery();`
Run Code Online (Sandbox Code Playgroud)

代码假设是检查表是否存在,如果存在且列不匹配,则添加新列以匹配CSV文件.

我该如何解决?

dca*_*tro 5

您必须将列名称用引号括起来,如下所示:

SqlCommand addcolumn = new SqlCommand("ALTER TABLE " + tbTable.Text +
               " ADD '" + dc.ColumnName + "' varchar(MAX)", myConnection);
Run Code Online (Sandbox Code Playgroud)

注意额外的单引号.

此外,tbTable.Text在查询中连接用户输入(例如)是非常危险的.您应该使用参数化查询.