简体   繁体   English

消息:System.Data.OleDb.OleDbException:查询表达式中的语法错误(缺少运算符)

[英]Message: System.Data.OleDb.OleDbException : Syntax error (missing operator) in query expression

public static void WriteData(string colName,string data)
{
    using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\""))
    {
        // string query = String.Format("INSERT INTO  [DataSet$]({0}) VALUES ({1})",colName, data);

        string query = String.Format("INSERT INTO  [DataSet$]({0}) VALUES ({1})", colName, data);
        cn.Open();
        OleDbCommand cmd = new OleDbCommand(query, cn);
        cmd.Parameters.AddWithValue("@colName", colName);
        cmd.Parameters.AddWithValue("@data", data);

        cmd.ExecuteNonQuery();
        cn.Close();
        cn.Dispose();
    }
}

What you are trying to do is mixing dynamic query generation and queryparameters.您要做的是混合动态查询生成和查询参数。 You can not use command parameters to populate column names in the query.您不能使用命令参数来填充查询中的列名。 Parameters are used only for passing values to the query.参数仅用于向查询传递值。

So what you need to do is, to use string.Format only for placing column name in the query and use command parameter only to pass data to the query.所以你需要做的是,使用string.Format仅用于在查询中放置列名,并仅使用命令参数将数据传递给查询。

public void WriteData(string colName, string data)
{
    using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\""))
    {
        string query = string.Format("INSERT INTO [DataSet$] ({0}) VALUES (@data)", colName);
        // The query variable will have following value assuming colName=token
        //INSERT INTO [DataSet$] (token) VALUES (@data)
        cn.Open();
        //Now use OleDbCommand to pass value of @data to the query.
        OleDbCommand cmd = new OleDbCommand(query, cn);
        cmd.Parameters.AddWithValue("@data", data);

        cmd.ExecuteNonQuery();
        cn.Close();
    }
}

This should help you resolve your issue.这应该可以帮助您解决问题。

public static void UpdateData(string keyName,string colName,string data)
    {
        using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Constants.FileName + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=3;READONLY=FALSE\""))
        {
            // string query = String.Format("INSERT INTO  [DataSet$]({0}) VALUES ({1})",colName, data);

                connection.Open();
                string commandString = String.Format("UPDATE [DataSet$] SET colName ='{0}' WHERE keyName = '{1}'",@data,@keyName);
                OleDbCommand cmd = new OleDbCommand(commandString, connection);
            cmd.Parameters.AddWithValue("@data", data);
            cmd.Parameters.AddWithValue("@keyName", keyName);
            connection.Close();
                connection.Dispose();
            }
        }
    }

暂无
暂无

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

相关问题 C# 中的 SQL 查询(System.Data.OleDb.OleDbException:'查询表达式中的语法错误(缺少运算符)) - SQL query in C# (System.Data.OleDb.OleDbException: 'Syntax error (missing operator) in query expression) 错误:System.Data.OleDb.OleDbException (0x80040E14):查询表达式中的语法错误(缺少运算符) - Error: System.Data.OleDb.OleDbException (0x80040E14): Syntax error (missing operator) in query expression System.Data.OleDb.OleDbException (0x80040E14):查询表达式中的语法错误(缺少运算符)电子邮件 = '12' 和密码 '12'' - System.Data.OleDb.OleDbException (0x80040E14): Syntax error (missing operator) in query expression 'Email= '12' and Password '12'' System.Data.OleDb.OleDbException:INSERT INTO语句中的语法错误 - System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 ' - System.Data.OleDb.OleDbException: 'Syntax error in UPDATE statement. ' System.Data.OleDb.OleDbException:UPDATE语句中的语法错误 - System.Data.OleDb.OleDbException: Syntax error in UPDATE statement System.Data.OleDb.OleDbException:条件表达式中的数据类型不匹配 - System.Data.OleDb.OleDbException: Data type mismatch in criteria expression system.data.oledb.oledbexception 标准表达式中的数据类型不匹配 - system.data.oledb.oledbexception data type mismatch in criteria expression System.Data.OleDb.OleDbException:“标准表达式中的数据类型不匹配。” C# 错误 - System.Data.OleDb.OleDbException: 'Data type mismatch in criteria expression.' C# error 'System.Data.OleDb.OleDbException:条件表达式中的数据类型不匹配。' 错误 - 'System.Data.OleDb.OleDbException: Data type mismatch in criteria expression.' error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM