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

时间:2014-06-06 13:58:15

标签: 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;
       }
    }
 }

我一直收到以下错误:

  

SqlException未处理:' varchar'

附近的语法不正确

在以下几行:

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

代码的作用是检查表是否存在,如果存在且列不匹配,则添加新列以匹配CSV文件。

我该如何解决?

1 个答案:

答案 0 :(得分:5)

您必须将列名包装在引号中,例如:

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

请注意额外的单引号。

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