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

时间:2011-12-13 15:10:31

标签: c# sql database count oledb

使用下面的代码时出现“语法错误”。 当你输入这个特定蛋白质的所有值时,它会避免添加行(这是一个结合了生物学和编程的项目。 '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寻求帮助!

2 个答案:

答案 0 :(得分:1)

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

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

您连接此字符串的方式意味着tblOrderAAWHERE之间不会有空格。在两者之间添加一个空格。

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

答案 1 :(得分:0)

首先,你设置它的方式,即使它被访问支持,也需要你处理不同的结果集(你必须调用Reader.NextResult才能从第二个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);
        }