简体   繁体   中英

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

i want to create a material database with c# and 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();
    }

This is working fine.

But when i try to insert only if the item does not exist with

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

This does not working. I am getting this error:

Getting a syntax error (missing operator) in query expression '@valuenomcom WHERE NOT EXISTS(SELECT * FROM NomCom WHERE Value = @valuenomcom)'.

But i have no idea what the problem is.

Any ideas?

I don't have Access so cant test syntax. But following this answer https://stackoverflow.com/a/16530237/3470178

You can do something like this:

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();

Of course test it first on Access.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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