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文件.
我该如何解决?
您必须将列名称用引号括起来,如下所示:
SqlCommand addcolumn = new SqlCommand("ALTER TABLE " + tbTable.Text +
" ADD '" + dc.ColumnName + "' varchar(MAX)", myConnection);
Run Code Online (Sandbox Code Playgroud)
注意额外的单引号.
此外,tbTable.Text在查询中连接用户输入(例如)是非常危险的.您应该使用参数化查询.