我正在使用sql server2008在winforms上创建一个标记表来存储数字,百分比等数据库..但是我在使用下面的代码时遇到上述异常错误:
private void button1_Click(object sender, EventArgs e)
{
float a = float.Parse(textBox1.Text);
float b = float.Parse(textBox2.Text);
float c = float.Parse(textBox3.Text);
float d = float.Parse(textBox4.Text);
float f = float.Parse(textBox5.Text);
float g = (a + b + c + d + f);
float h = (g / 500) * 100;
label11.Text = Convert.ToString((g));
label14.Text = Convert.ToString(h + "%");
label11.Visible = label14.Visible = true;
SqlConnection con = new SqlConnection("Data Source=Emmad-PC;Initial Catalog=SchoolManagement;User ID=sa;Password=lenovo");
SqlCommand j =new SqlCommand("Insert into Marksheet(RollNo, English, Math, Science, PSt, Islamiat, Total, Percentage) where values(@ROLL NO, @English, @Math, @Science, @Pakistan Studies, @Islamiat, @Total, @Percentage",con);
j.Parameters.AddWithValue("@ROLL NO",float.Parse(textBox6.Text));
j.Parameters.AddWithValue("@English", float.Parse(textBox1.Text));
j.Parameters.AddWithValue("@Math", float.Parse(textBox2.Text));
j.Parameters.AddWithValue("@Science", float.Parse(textBox3.Text));
j.Parameters.AddWithValue("@Pakistan Studies", float.Parse(textBox4.Text));
j.Parameters.AddWithValue("@Islamiat", float.Parse(textBox5.Text));
j.Parameters.AddWithValue("@Total",Convert.ToString( label11.Text));
j.Parameters.AddWithValue("@Percentage",Convert.ToString(label14.Text));
con.Open();
j.ExecuteNonQuery();
con.Close();
}
你的建议非常值得注意:)
答案 0 :(得分:3)
此查询有多个错误:
Insert into Marksheet
(RollNo, English, Math, Science, PSt, Islamiat, Total, Percentage)
where values
(@ROLL NO, @English, @Math, @Science, @Pakistan Studies, @Islamiat, @Total, @Percentage
WHERE
个关键字。 (删除它)[]
中以明确地将它们定义为标识符而不是关键字)下面:
INSERT INTO [Marksheet]
([RollNo], [English], [Math], [Science], [PSt], [Islamiat], [Total], [Percentage])
VALUES
(@ROLLNO, @English, @Math, @Science, @PakistanStudies, @Islamiat, @Total, @Percentage)
当然,更新已更正参数名称的参数添加行:
j.Parameters.AddWithValue("@ROLLNO",float.Parse(textBox6.Text));
j.Parameters.AddWithValue("@PakistanStudies", float.Parse(textBox4.Text));
其他建议,我们就此问题进行了讨论:
AddWithValue()
有效,但isn't always the best idea。它依赖于系统为您找出类型,并且它并不总是正确的。添加参数时显式设置类型的错误可能性较小。float.Parse()
可能会出现例外情况,具体取决于用户输入。在尝试在数据库交互中使用它们之前,先使用float.TryParse()
解析值。成功解析后,然后转到代码的数据库部分。using
语句括起任何IDisposable
个对象的用法。 (在这种情况下主要是您的SqlConnection
对象。)由于它生成finally
块并处理为您关闭/处理连接,因此出现错误和资源泄漏的风险较小。Convert.ToString()
值上致电string
。它已经是一个字符串了。答案 1 :(得分:0)
删除WHERE关键字,在insert语句中使用它是不正确的。