2013-04-17 2 views
0

Я потратил часы, пытаясь решить эту ошибку, но не смог. Я был бы рад, если бы кто-то помог мне решить эту проблему.имя столбца недопустимо Имя узла (если есть) =, column name = 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

До сих пор, что я нашел:

«column name = d» в ошибке - это значение текстового поля. Если я напечатаю a в текстовом поле, ошибка изменится на «column name = a».

Если я ставлю цифры в текстовое поле вместо символа изменения ошибки в этом «A отсутствует параметр [параметр порядкового = 1]. Тип данных столбца NVARCHAR.

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

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

столбцов в типах данных NVARCHAR, междунаре или изображениях.

Чтобы убедиться, что я проверил базу данных, чтобы увидеть, работает ли вставка, база данных по-прежнему пуста.

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Вы также должны поместить свои 'FileStream',' SqlCeConnection' и 'SqlCeCommand' в' используемые' блоки. –

ответ

2

Чтобы избежать проблем с SQL-инъекциями, вам необходимо использовать параметры SQL.

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

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

+0

Я изменил код на этот SqlCeCommand cmd = новый SqlCeCommand («вставить в Staffs (« имя »,« возраст »,« квалификация »,« мобильная »,« стационарная »,« зарплата »,« pay_type »,« адрес », 'work_type', 'reference', 'picture') значения ("+ textBox16.Text +", "+ textBox15.Текст + "," + textBox14.Text + "," + textBox13.Text + "," + textBox12.Text + "," + textBox11.Text + "," + comboBox2.Text + "," + richTextBox2.Text + "," + textBox10.Text + "," + textBox9.Text + "," + "@pic)", conn); ошибка изменилась на это: –

+0

Произошла ошибка при анализе запроса [токен name = 1, ...] –

+0

Значения должны быть указаны, а не имена столбцов. –

1

Неправильное имя параметра. Это должно быть @pic, а не pic.

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

+0

Я попытался вставить без столбца pic вообще, но ошибка все еще наступает. –

0

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

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