C# 在这个对象中o=sc.ExecuteNonQuery();正在给我错误sqlexceptionunhandled怎么办建议我一个正确的代码

C# 在这个对象中o=sc.ExecuteNonQuery();正在给我错误sqlexceptionunhandled怎么办建议我一个正确的代码,c#,.net,visual-studio-2012,C#,.net,Visual Studio 2012,带空格的字段和表名必须在[]内,并且在查询的末尾有一个额外的逗号。尝试: private void button1_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection("Data Source=SAGAR\\SQLEXPRESS;Initial Catalog=ClinicDb;Integrated Security=True"); con.Open(); SqlCommand

带空格的字段和表名必须在
[]
内,并且在查询的末尾有一个额外的逗号。尝试:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=SAGAR\\SQLEXPRESS;Initial Catalog=ClinicDb;Integrated Security=True");
    con.Open();
    SqlCommand sc = new SqlCommand("insert into Patient_Details (Patient Id,Name,Age,Contact No,Address) VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "',);", con);
    object o= sc.ExecuteNonQuery();
    MessageBox.Show(o +"Saved data");
    con .Close();
}

也考虑使用参数,因为您对SQL注入是开放的。

我看到了一些事情;

  • 患者Id
    应为
    [患者Id]
    联系人编号
    应为
    [联系人编号]
    ,因为它们不止一个单词。作为最佳实践,将他们的名字改为一个单词
  • textBox5.Text+“,
    部分的末尾有额外的
但更重要的是,您应该始终使用。这种字符串连接是可以被攻击的

并使用自动处理连接和命令,而不是手动调用
Close
dispose
方法

SqlCommand sc = new SqlCommand("insert into [Patient_Details] ([Patient Id],Name,Age,[Contact No],Address) VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "');", con);
object o= sc.ExecuteNonQuery();
顺便说一下,我在示例中使用了
AddWithValue
,因为您没有告诉我们列类型,但您没有告诉我们列类型。使用
Add
方法重载指定参数类型(
SqlDbType
)及其大小

ExecuteNonQuery
获取
对象也很奇怪。它将返回
int
作为有效行计数。在您的情况下,它将是
1
0


最后,我强烈怀疑您的
患者Id
年龄
联系人编号
列应该是数字类型,而不是字符类型。

异常的详细信息是什么?顺便问一下,您应该始终使用。这种字符串连接容易受到攻击。您的列名中有空格,其中包含表示需要用大括号括起来,例如
[列名]
谢谢,先生,它有工作,是的,我将使用参数化查询谢谢,先生,我对参数化查询感到困惑,你能给我一个语法或代码,它将如何返回吗???谢谢,先生,它有工作,是的,我将使用参数谢谢,你不需要
字符串
+
操作符将自动执行在
o
上调用
ToString
。谢谢,先生,它有作用,是的,我将使用参数化查询。谢谢你,请使用
AddWithValue
@DavidG。我解释了我为什么在最后一部分使用它。嗯,是的,但我宁愿使用示例值,而不是暗示它的存在!:)
using(var con = new SqlConnection(connection))
using(var sc = con.CreateCommand())
{
    sc.CommandText = @"insert into Patient_Details ([Patient Id],Name,Age,[Contact No],Address) 
                       VALUES(@id, @name, @age, @no, @address)"; 
    sc.Parameters.AddWithValue("@id", textBox1.Text);
    sc.Parameters.AddWithValue("@name", textBox2.Text);
    sc.Parameters.AddWithValue("@age", textBox3.Text);
    sc.Parameters.AddWithValue("@no", textBox4.Text);
    sc.Parameters.AddWithValue("@address", textBox5.Text);

    con.Open();
    int i = sc.ExecuteNonQuery();
    MessageBox.Show(i + " Saved data");
}