Синтаксическая ошибка при сравнении значений из разных таблиц - PullRequest
0 голосов
/ 13 декабря 2011

Я получаю «синтаксическую ошибку» при использовании приведенного ниже кода.Предполагалось избежать добавления строки, когда вы ввели все значения этого конкретного белка (это проект, объединенный в области биологии и программирования. '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 ]

1 голос
/ 13 декабря 2011

Я не уверен, действительно ли наличие двух операторов select в вашем запросе MySQL или нет, или почему вы берете строку только для того, чтобы превратить ее в число, чтобы вы могли добавить ее в другую строку, но это, вероятно, причина синтаксической ошибки.

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

То, как вы объединяете эту строку, означает, что между tblOrderAA и WHERE не должно быть пробела. Добавьте пробел между ними.

Вам также следует искать SQL-инъекции / параметризованные запросы.

0 голосов
/ 14 декабря 2011

Во-первых, способ его настройки, даже если он был поддержан доступом, потребует от вас обработки другого набора результатов (вам нужно будет вызвать 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);
        }
...