имя столбца недопустимое имя узла (если есть) = , имя столбца = d

Я часами пытался решить эту ошибку, но не смог. Я был бы рад, если бы кто-нибудь помог мне решить эту проблему.

Код:

FileStream fs;
fs = new FileStream(@imagename, FileMode.Open, FileAccess.Read);
byte[] picbyte = new byte[fs.Length];
fs.Read(picbyte, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
string query;
SqlCeConnection conn = new SqlCeConnection(@"Data Source=C:\Users\admin\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\hotel.sdf");
conn.Open();
SqlParameter picparameter = new SqlParameter();
picparameter.SqlDbType = SqlDbType.Image;
picparameter.ParameterName = "pic";
picparameter.Value = picbyte;
query = "insert into Staffs(name, age, qualification, mobile, landline, salary, salary_type, address, work_type, reference, picture) values(" + textBox16.Text + ", " + textBox15.Text + "," + textBox14.Text + "," + textBox13.Text + "," + textBox12.Text + "," + textBox11.Text + "," + comboBox2.Text + "," + richTextBox2.Text + "," + textBox10.Text + "," + textBox9.Text + ", " + " @pic)";
SqlCeCommand cmd = new SqlCeCommand("insert into Staffs(name, age, qualification, mobile, landline, salary, salary_type, address, work_type, reference, picture) values(" + textBox16.Text + ", " + textBox15.Text + "," + textBox14.Text + "," + textBox13.Text + "," + textBox12.Text + "," + textBox11.Text + "," + comboBox2.Text + "," + richTextBox2.Text + "," + textBox10.Text + "," + textBox9.Text + ", " + " @pic)", conn);
cmd.ExecuteNonQuery();
MessageBox.Show("Profile Added");
cmd.Dispose();
conn.Close();
conn.Dispose();

Ошибка:

имя столбца недопустимое имя узла (если есть) = , имя столбца = d

Пока что я нашел:

«имя столбца = d» в ошибке — это значение текстового поля. Если я наберу a в текстовом поле, ошибка изменится на «имя столбца = a».

Если я помещаю числа в текстовое поле вместо символа, ошибка изменяется на это «Параметр отсутствует [порядковый номер параметра = 1]. Тип данных столбца — nvarchar.

Я попытался изменить схему базы данных, но ничего не произошло.

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

Столбцы имеют типы данных nvarchar, int или image.

Просто чтобы убедиться, что я проверил базу данных, чтобы убедиться, что вставка работает, база данных все еще пуста.


person A Mohammed Hussain    schedule 17.04.2013    source источник
comment
Я отредактировал ваш заголовок. См. Должны ли вопросы включать «теги» в свои заголовки?, если нет единого мнения, не следует.   -  person John Saunders    schedule 17.04.2013
comment
Вы также должны поместить свои FileStream, SqlCeConnection и SqlCeCommand в блоки using.   -  person John Saunders    schedule 17.04.2013


Ответы (3)


Вам нужно использовать параметры SQL, чтобы избежать проблем с внедрением SQL.

Но причина, по которой ваши вещи сейчас терпят неудачу, заключается в том, что вы не цитируете свои строковые значения в запросе. Если вы выполните отладку и посмотрите на текст вашей команды, вы увидите что-то вроде values(abc,def,ghi...) без одинарных кавычек вокруг строк.

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

person Joe Enos    schedule 17.04.2013
comment
Я изменил код на этот SqlCeCommand cmd = new SqlCeCommand(вставить в Staffs('имя', 'возраст', 'квалификация', 'мобильный', 'стационарный', 'зарплата', 'salary_type', 'address', 'work_type ', 'ссылка', 'изображение') значения ( + textBox16.Text + , + textBox15.Text + , + textBox14.Text + , + textBox13.Text + , + textBox12.Text + , + textBox11.Text + , + comboBox2 .Text + , + richTextBox2.Text + , + textBox10.Text + , + textBox9.Text + , + @pic), conn); ошибка изменилась на это: - person A Mohammed Hussain; 17.04.2013
comment
Значения должны быть заключены в кавычки, а не имена столбцов. - person Joe Enos; 17.04.2013
comment
Я изменил его на SqlCeCommand cmd = new SqlCeCommand(вставить в Staffs(имя, возраст, квалификация, мобильный, стационарный, зарплата, тип_зарплаты, адрес, тип_работы, ссылка, изображение) values(' + textBox16.Text + ', ' + textBox15. Текст + ',' + textBox14.Text + ',' + textBox13.Text + ',' + textBox12.Text + ',' + textBox11.Text + ',' + comboBox2.Text + ',' + richTextBox2.Text + ',' + textBox10.Text + ',' + textBox9.Text + ', + @pic), conn); Я не цитировал картинку, показывает другую ошибку, пожалуйста, отредактируйте этот код на правильный. - person A Mohammed Hussain; 17.04.2013
comment
Вам придется разобраться с этим самостоятельно. Параметризируйте оператор SQL, назовите свои текстовые поля как-то более разумно, и вы сможете самостоятельно отследить проблему. - person Joe Enos; 17.04.2013

Имя вашего параметра неверно. Должно быть @pic, а не pic.

Кстати, то, как вы объединяете значения текстовых полей, делает вас уязвимыми для атак SQL Injection. Конечно, я не знаю вашего контекста, но рассмотрите возможность замены конкатенации строк установкой значения параметра.

person Tahbaza    schedule 17.04.2013
comment
Пробовал вставлять вообще без столбца pic, но ошибка все равно появляется. - person A Mohammed Hussain; 17.04.2013

Я решил эту проблему, удалив всю базу данных и воссоздав ее.

Очевидно, это происходит, если у вас есть более старая версия таблицы в базе данных, чем вы хотите использовать, поэтому этот столбец не существует в этой таблице.

person libik    schedule 19.08.2014