簡體   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();
    }
}

您要做的是混合動態查詢生成和查詢參數。 您不能使用命令參數來填充查詢中的列名。 參數僅用於向查詢傳遞值。

所以你需要做的是,使用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();
    }
}

這應該可以幫助您解決問題。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM