Несоответствие типа данных с использованием скаляра выполнения

Я хочу получить сумму ALLOCATED_DEPOSIT из распределений, используя Invoice_No. Я получаю все подробности через datareader, но выполнение только скаляра вызывает у меня проблемы. Я пробовал все, но при использовании следующего кода всегда выдается "ошибка несоответствия типа данных".

connection.Close();

        try
        {
            connection.Open();
            string cstrQuery = "SELECT SUM (ALLOCATED_DEPOSIT)FROM ALLOCATIONS WHERE INVOICE_NO= " + int.Parse(txt_Invoiceno.Text);
            OleDbCommand cmd = new OleDbCommand(cstrQuery, connection);
            int sum = Convert.ToInt32(cmd.ExecuteScalar());
            //long sum = (long)dt.Compute("Sum(ALLOCATED_DEPOSIT)", "True");

            textBox2.Text = sum.ToString();
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message);
        }
        connection.Close();

person Sheharyar Khan Durrani    schedule 19.05.2020    source источник
comment
Можете ли вы поделиться точным сообщением об ошибке, которое вы получаете? Какая строка в коде выдает ошибку?   -  person Chetan Ranpariya    schedule 19.05.2020
comment
Если Invoice_No имеет текстовый тип, используйте для параметра разделители в виде апострофа. Или вместо объединения параметров просмотрите stackoverflow.com/questions/11905185/< /а>   -  person June7    schedule 19.05.2020
comment
@ChetanRanpariya Говорит о несоответствии типа данных в выражении критерия.   -  person Sheharyar Khan Durrani    schedule 20.05.2020


Ответы (1)


Имейте в виду, что ExecuteScalar() может вернуть null.

Вы также используете результат как string, поэтому нет необходимости преобразовывать в int, а затем в string.

Сделайте это вместо этого:

var sumObject = cmd.ExecuteScalar();
if(sumObject != null)
{
    textBox1.Text = sumObject.ToString();
}
else
{
    Console.WriteLine("Something went wrong!");
}

Исходя из вашего запроса, я бы предположил, что значения в поле ALLOCATED_DEPOSIT являются числами с плавающей запятой, а не целыми числами, поэтому сумма которых будет с плавающей запятой. Это может быть "ошибка несоответствия типа данных", которую вы видите.

person Barns    schedule 19.05.2020
comment
Я понял, что Invoice_no должен быть int в БД, а ALLOCATED_DEPOSIT должен быть текстом. Теперь это работает. Спасибо за помощь. - person Sheharyar Khan Durrani; 20.05.2020
comment
Если вы чувствуете, что этот ответ помог, пожалуйста, не стесняйтесь принять ответ. - person Barns; 24.05.2020