簡體   English   中英

在 C# 中為 MS Access 查詢表達式中出現語法錯誤(缺少運算符)

[英]Getting a syntax error (missing operator) in query expression in C# for MS Access

我想用 c# 和 MS Access SQL 創建一個材料數據庫:

private void btnTest_Click(object sender, EventArgs e)
    {
        string provStr = "Provider=Microsoft.Jet.OLEDB.4.0;";
        string openStr = "Data source=" + AppDomain.CurrentDomain.BaseDirectory + "MaterialDB.mdb";

        // Create structure, if not exist
        con = new OleDbConnection();

        con.ConnectionString = provStr + openStr;

        try
        {
            con.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        OleDbCommand cmdTest = con.CreateCommand();

        cmdTest.CommandText = "CREATE TABLE NomCom (" + Environment.NewLine +
                          "          ID INT         NOT NULL   IDENTITY(1,1)  PRIMARY KEY," + Environment.NewLine +
                          "      ValueTest VARCHAR(50) NOT NULL   UNIQUE" + Environment.NewLine +
                          ");" + Environment.NewLine;
        cmdTest.ExecuteNonQuery();

        cmdTest.CommandText = "INSERT INTO NomCom (ValueTest)" + Environment.NewLine +       //ID    ValueTest
                              "SELECT @valuenomcom;";
        cmdTest.Parameters.AddWithValue("@valuenomcom", "Steel");
        cmdTest.ExecuteNonQuery();
    }

這工作正常。

但是當我嘗試僅在該項目不存在的情況下插入時

private void ...
    {
        cmdTest.CommandText = "INSERT INTO NomCom (ValueTest)" + Environment.NewLine +       //ID    ValueTest
                              "SELECT @valuenomcom WHERE NOT EXISTS(SELECT * FROM NomCom WHERE Value = @valuenomcom);" + Environment.NewLine;
        cmdTest.Parameters.AddWithValue("@valuenomcom", "Steel");
        cmdTest.ExecuteNonQuery();
    }

這不起作用。 我收到此錯誤:

在查詢表達式“@valuenomcom WHERE NOT EXISTS(SELECT * FROM NomCom WHERE Value = @valuenomcom)”中出現語法錯誤(缺少運算符)。

但我不知道問題是什么。

有任何想法嗎?

我沒有訪問權限,因此無法測試語法。 但是按照這個答案https://stackoverflow.com/a/16530237/3470178

你可以這樣做:

cmdTest.CommandText = 
     "INSERT INTO NomCom (ValueTest)" + Environment.NewLine +       //ID    ValueTest
     "SELECT * 
      FROM ( SELECT @valuenomcom as newValue ) as Q
      WHERE Q.newValue NOT IN (SELECT Value FROM NomCom WHERE Value = @valuenomcom);" +
      Environment.NewLine;
cmdTest.Parameters.AddWithValue("@valuenomcom", "Steel");
cmdTest.ExecuteNonQuery();

當然,首先在 Access 上進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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