Prateek gsharma Ответов: 3

Получение несоответствия типов данных в выражении критерия ошибка


ниже приведен мой пример кода

я получаю ошибку в нижеприведенных кодах

1)кон1.Открыть();
УМК.Метод executenonquery();
2)da.Fill(ds);


я использую базу данных access.

textbox4 & textbox5-это двойной тип данных в моей базе данных access, то есть я должен вводить только числовые данные hrs

Что я уже пробовал:

частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
using (OleDbConnection con1 = new OleDbConnection(con))
{
OleDbCommand cmd = новая OleDbCommand();
УМК.Подключение = видите con1;
OleDbDataAdapter da;

DataSet ds = новый набор данных();

if ((textBox4.Text == string.Пусто) || (textBox5.Text == строка.Пусто) || (comboBox1.Text == string.Пусто) || (comboBox2.Text == string.Пустой))
{

Ящик для сообщений.Show("пожалуйста, введите все ваши данные в соответствующие поля...!!!!!", "сообщение", MessageBoxButtons.Хорошо, MessageBoxIcon.Предупреждение);


}
еще
{
cmd = new OleDbCommand("SELECT * from Spldetails where Date = '" + dateTimePicker1.Текст + "' и empid = '" + текстовое поле textbox1.Текст + " и Splwrk = '" + comboBox2.Текст + " и Splwrkdetails = '" + textBox6.Текст + "'" видите con1);
вы видите con1.Открыть();
da = новый OleDbDataAdapter(cmd);
да.Заполнить(ДС);
int i = ds.Tables[0].Rows.Рассчитывать;
если (i > 0)
{
Ящик для сообщений.Показать("Дублировать Детали !!!! Вы уже отправили свои данные на " + dateTimePicker1.Текст + ".");
//ds.Clear();
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
поле combobox1.Текст = "";
comboBox2.Text = "";

}
еще
{

пробовать
{


строковая команда = "вставить в Spldetails([Date],[EmpId],[EmpName],[Designation],[Records],[Splwrkhrs],[Team],[Splwrk],[Splwrkdetails],[Allottedby]) Значения('" + this.dateTimePicker1.Текст + "','" + это.текстовое поле textbox1.Текст + "','" + это.поле textbox2.Текст + "','" + это.textbox3 и.Текст + "','" + это.textBox4.Текст + "','" + это.textBox5.Текст + "','" + это.textBox8.Текст + "','" + это.comboBox2.Текст + "','" + это.textBox6.Текст + "','" + это.поле combobox1.Текст + "')";
cmd = new OleDbCommand(command, con1);
вы видите con1.Открыть();
УМК.Метод executenonquery();
Ящик для сообщений.Шоу("Поздравляю....Ваши данные были успешно представлены");

textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
поле combobox1.Текст = "";
comboBox2.Text = "";
dataGridView1.Обновить();

}

catch (исключение exp)
{
Ящик для сообщений.Показать("ошибка" + exp);
}

}
}

}
}

3 Ответов

Рейтинг:
1

RmcbainTheThird

Вам нужно использовать параметры в операторе select, а не объединять строки вместе. Это позволит вам указать типы значений в предложении where. например:

string sqlStr = "SELECT [MenuID],[MenuText],[URL]"
                            + "  FROM [dbo].[ServiceDeskMenu]"
                            + "  WHERE [ParentID] = @parent_type"
                            + "  ORDER by[Position] ";
            SqlParameter param = new SqlParameter
            {
                ParameterName = "@parent_type",
                DbType = DbType.Int32,
                Value = parentType
            };

затем вы можете добавить объект param к объекту sql command и выполнить свой запрос

sqlCommand cmd = new SqlCommand(sqlStr, conn);
                if(param!=null)
                { 
                    cmd.Parameters.Add(param);
                }


Prateek gsharma

хорошо, я попробую, сэр.

Рейтинг:
0

Patrice T

string command = "INSERT INTO Spldetails([Date],[EmpId],[EmpName],[Designation],[Records],[Splwrkhrs],[Team],[Splwrk],[Splwrkdetails],[Allottedby]) VALUES('" + this.dateTimePicker1.Text + "','" + this.textBox1.Text + "','" + this.textBox2.Text + "','" + this.textBox3.Text + "','" + this.textBox4.Text + "','" + this.textBox5.Text + "','" + this.textBox8.Text + "','" + this.comboBox2.Text + "','" + this.textBox6.Text + "','" + this.comboBox1.Text + "')";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Prateek gsharma

ты имеешь ввиду, что у меня есть, чтобы использовать параметризованные запросы.ок я буду использовать сейчас.

скажите мне решение сэр?

Patrice T

Из-за способа построения команды SQL синтаксическая ошибка зависит от содержимого текстовых полей.

Рейтинг:
0

RmcbainTheThird

И еще одно: не выбирайте*, а просто выберите нужные поля.


Jinto Jacob

Привет, пожалуйста, не создавайте новое решение, чтобы добавить строки к вашему предыдущему ответу. вы можете отредактировать ответ с помощью кнопки улучшить решение и добавить строки к ответу.