比较来自不同表的值时出现语法错误

本文关键字:语法 错误 比较 | 更新日期: 2023-09-27 18:17:48

我得到一个"语法错误",而使用下面的代码。当你输入这个特定蛋白质的所有值时,它应该避免添加行(这是一个结合生物学和编程的项目)。'serialPro'是一个包含数字的文本框,但保存为字符串。'Reset_Click'重置所有文本框。代码:

            if ((serialPro.Text == String.Empty) || (codon1.Text == String.Empty))
        {
            MessageBox.Show("You didn't fill all the fields","Attention"
            MessageBoxButtons.OK,
            MessageBoxIcon.Exclamation,
            MessageBoxDefaultButton.Button1);
            Reset_Click(sender, e);
        }
        else
        {
            string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:''Projects_2012''Project_Noam''Access''myProject.accdb";
            OleDbConnection myConnection = new OleDbConnection(connectionString);
            myConnection.Open();
            string mySQL = " SELECT COUNT(tblOrderAA.orderAASerialPro) AS orderAASerialPro1 FROM tblOrderAA" +
                             "WHERE tblOrderAA.orderAASerialPro=" + Convert.ToInt32(serialPro.Text) +
                             " SELECT (tblProInfo.proInfoSerialNum) FROM tblProInfo WHERE tblProInfo.proInfoSerialNum=" +
                             Convert.ToInt32(serialPro.Text);
            OleDbCommand datacommand = new OleDbCommand(mySQL, myConnection);
            OleDbDataReader dataReader = datacommand.ExecuteReader();
            dataReader.Read();
            if (dataReader.GetInt32(0) == dataReader.GetInt32(1))
            {
                MessageBox.Show("You have entered all the amino acids for this protein", "Attention",
                MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation,
                MessageBoxDefaultButton.Button1);
                Reset_Click(sender, e);
            }

TNX的帮助!

比较来自不同表的值时出现语法错误

我不确定是否有两个选择语句在你的MySQL查询是有效的或不,或者为什么你采取一个字符串只是把它变成一个数字,所以你可以把它添加到另一个字符串,但这可能是语法错误的原因。

" SELECT COUNT(tblOrderAA.orderAASerialPro) AS orderAASerialPro1 FROM tblOrderAA" +
"WHERE tblOrderAA.orderAASerialPro=" + Convert.ToInt32(serialPro.Text) +

你连接这个字符串的方式意味着在tblOrderAAWHERE之间没有空格。中间加一个空格

您还应该查找SQL注入/参数化查询

首先,您设置它的方式,即使访问支持它,也需要处理不同的结果集(您必须调用Reader)。nextreresult,以便从第二个select语句中获取值。

然而,这是一个很容易解决的问题:把你的查询分解成单独的命令,只从你正在寻找的每个查询中获得一个值:

        int TotalCompleted;
        int TotalToComplete;
        string mySQL;
        OleDbCommand datacommand;
        object oValue;
        mySQL = " SELECT COUNT(tblOrderAA.orderAASerialPro) AS orderAASerialPro1 FROM tblOrderAA WHERE tblOrderAA.orderAASerialPro=" + Convert.ToInt32(serialPro.Text);
        datacommand = new OleDbCommand(mySQL, myConnection);
        oValue = datacommand.ExecuteScalar();
        if (oValue != DBNull.Value)
        {
            TotalCompleted = (int)oValue;
        } else 
        {
            TotalCompleted = 0;
        }
        mySQL = "SELECT tblProInfo.proInfoSerialNum FROM tblProInfo WHERE tblProInfo.proInfoSerialNum=" + Convert.ToInt32(serialPro.Text);
        datacommand = new OleDbCommand(mySQL, myConnection);
        oValue = datacommand.ExecuteScalar();
        if (oValue != DBNull.Value)
        {
            TotalToComplete = (int)oValue;
        } else 
        {
            TotalToComplete = 0;
        }
        if (TotalCompleted == TotalToComplete)
        {
            MessageBox.Show("You have entered all the amino acids for this protein", "Attention",
            MessageBoxButtons.OK,
            MessageBoxIcon.Exclamation,
            MessageBoxDefaultButton.Button1);
            Reset_Click(sender, e);
        }