【发布时间】:2019-11-15 10:49:49
【问题描述】:
以下代码引发异常datatype mistmach in criteria expression。异常从何而来?生成的查询在Microsoft Access 中运行没有问题。
foreach (DataColumn column in dt.Columns)
{
if (column.DataType == typeof(String))
{
if (column.ColumnName != "ID1" && column.ColumnName != "ID" && column.ColumnName != "Geometry" && column.ColumnName != "Geometry_SK")
{
string query = "UPDATE " + tb_tablename.Text.Trim() + " SET " + column.ColumnName + " = Replace([" + column.ColumnName + "], Chr(10), \"\");";
using (OleDbCommand cmd = new OleDbCommand(query, conn))
{
cmd.ExecuteNonQuery();
}
}
}
}
例如生成的 SQL 代码是 UPDATE Necropolis SET NAME_MR = Replace([NAME_MR], Chr(10), ""); 。使用 cmd.ExecuteNonQuery(); 生成其执行后
参数版本显示Syntax error in query. Incomplete query clause.。
using (OleDbCommand cmd = new OleDbCommand(query, conn))
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "UPDATE @target SET [@columnname] = Replace([@columnname], Chr(10), '');";
cmd.Parameters.Add(new OleDbParameter("@target", OleDbType.VarChar)).Value = tb_tablename.Text.Trim();
cmd.Parameters.Add(new OleDbParameter("@columnname", OleDbType.VarChar)).Value = column.ColumnName;
MessageBox.Show(cmd.CommandText);
cmd.ExecuteNonQuery();
}
【问题讨论】:
-
@tymtam 我喜欢有列 ID 和 ID1 :)
-
欢迎来到 Stack Overflow!请查看how-to-ask 和how-to-create-reproducible-example 以帮助您提出一个好问题,从而得到一个好的答案
-
query的确切值是多少? -
问题出在您错误地存储在数据库中的类型(如 Varchar)和应该是静态且不能作为查询参数的标识符。看stackoverflow.com/questions/2838490/table-name-as-variable