我正在读取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文件。
我该如何解决?
答案 0 :(得分:5)
您必须将列名包装在引号中,例如:
SqlCommand addcolumn = new SqlCommand("ALTER TABLE " + tbTable.Text +
" ADD '" + dc.ColumnName + "' varchar(MAX)", myConnection);
请注意额外的单引号。
此外,在查询中连接用户输入(例如,tbTable.Text
)是非常危险的。您应该使用参数化查询。