' real'附近的语法不正确。关键字附近的语法不正确'其中'

时间:2016-02-12 13:50:27

标签: c# sql-server

我正在使用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();
        } 

你的建议非常值得注意:)

2 个答案:

答案 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
  1. 您无缘无故地拥有额外的WHERE个关键字。 (删除它)
  2. 可能在这些列名中使用了一些保留字。 (将它们包含在[]中以明确地将它们定义为标识符而不是关键字)
  3. 参数名称中有空格。 (删除它)
  4. 你没有关闭括号。 (关闭它)
  5. 下面:

    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));
    

    其他建议,我们就此问题进行了讨论:

    1. AddWithValue()有效,但isn't always the best idea。它依赖于系统为您找出类型,并且它并不总是正确的。添加参数时显式设置类型的错误可能性较小。
    2. float.Parse()可能会出现例外情况,具体取决于用户输入。在尝试在数据库交互中使用它们之前,先使用float.TryParse()解析值。成功解析后,然后转到代码的数据库部分。
    3. (好吧," 2A。"实际上......)您正在解析值两次并且由于某种原因忽略了第一个变量。
    4. 使用using语句括起任何IDisposable个对象的用法。 (在这种情况下主要是您的SqlConnection对象。)由于它生成finally块并处理为您关闭/处理连接,因此出现错误和资源泄漏的风险较小。
    5. 您无需在Convert.ToString()值上致电string。它已经是一个字符串了。

答案 1 :(得分:0)

删除WHERE关键字,在insert语句中使用它是不正确的。