【发布时间】:2014-06-06 13:58:14
【问题描述】:
我正在读取 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 文件。
我该如何解决?
【问题讨论】:
-
您是否确认在文本连接后该命令会评估什么?然后您是否针对您的数据库运行该 SQL 以验证它是否有效?
-
你为什么要捕捉和吃掉所有有价值的异常?
-
我建议您对 SQL 查询使用参数而不是字符串连接,然后调试您的程序,获取查询字符串,然后在您的查询工具中运行它以查看它在做什么。
-
我有相同的代码可以从 DBF 中读取,并且工作正常。
-
您使用的是什么数据库平台? Oracle、Sql Server、MySql?
标签: c# sql sql-server csv