简体   繁体   English

C# 标准表达式中的数据类型不匹配

[英]C# data type mismatch in criteria expression

The following code raises an exception datatype mistmach in criteria expression .以下代码datatype mistmach in criteria expression Where does the exception come from?异常从何而来? Generated query works in Microsoft Access with no problems.生成的查询在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();
            }
        }
    }
}

As example generated SQL code is UPDATE Necropolis SET NAME_MR = Replace([NAME_MR], Chr(10), "");例如生成的 SQL 代码是UPDATE Necropolis SET NAME_MR = Replace([NAME_MR], Chr(10), ""); . . After generating its execute with cmd.ExecuteNonQuery();使用 cmd.ExecuteNonQuery() 生成其执行后;

Parameters version shows Syntax error in query. Incomplete query clause.参数版本Syntax error in query. Incomplete query clause. 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();
                            }

are you sure, that query gives a valid SQL statement?您确定,该query给出了有效的 SQL 语句吗? I am not sure, but =Replace([xyz], Chr(10), \"\");我不确定,但是=Replace([xyz], Chr(10), \"\"); does not look like a valid SQL statement fo me... I think, you should use two seperate strings for the columname:看起来不像是一个有效的 SQL 语句对我来说......我认为,你应该使用两个单独的字符串作为列名:

string col_org = column.ColumnName;
string col_new = column.ColumnName.Replace(Chr(10), "\"");
string query = "UPDATE " + tb_tablename.Text.Trim() + " SET " + col_org + " = " + "+ col_new + ";";

Can you give us an example of the update string?你能给我们一个更新字符串的例子吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM