繁体   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