我花了好几个小时试图解决这个错误,但我做不到。如果有人能帮我解决这个问题,我会很高兴的。
代码:
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,则错误将更改为“column name = a”。
如果我在文本字段中放入数字而不是字符,则错误会更改为此 “缺少参数[参数ordinal = 1]。列的数据类型为nvarchar。
我尝试编辑数据库架构,但什么都没发生。
我检查了数据库的重复副本并找不到,所以我想问题是代码。
列的数据类型为nvarchar,int或image。
为了确保我检查数据库以查看插入是否有效,数据库仍为空。
答案 0 :(得分:2)
您需要使用SQL参数来避免SQL注入问题。
但是你的东西现在失败的原因是你没有在查询中引用你的字符串值。如果你调试并查看命令的文本,你会看到像values(abc,def,ghi...)
这样的东西,而不是字符串周围的单引号。
该查询尝试运行,当然它失败了。除了使代码更安全,更易于阅读外,SQL参数不再需要单引号。
答案 1 :(得分:1)
您的参数名称不正确。它应该是@pic
,而不是pic
。
顺便说一句,您连接文本框值的方式让您对SQL注入攻击持开放态度。当然,我不知道你的上下文,但考虑用参数值设置替换字符串连接。
答案 2 :(得分:0)
我通过删除整个数据库并重新创建它来解决了这个问题。
很明显,如果您在数据库中使用的旧版本比您想要使用的那样,则会发生这种情况,因此该表中不存在该列。