C#单选按钮SQL Server

C#单选按钮SQL Server,c#,sql-server,radio-button,C#,Sql Server,Radio Button,我不知道这个代码有什么问题。在添加单选按钮之前,它工作得很好。另外,SQL Server中集群主键的用途是什么 private void createSave_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DELL\source\repos\phoneB

我不知道这个代码有什么问题。在添加单选按钮之前,它工作得很好。另外,SQL Server中集群主键的用途是什么

private void createSave_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DELL\source\repos\phoneBookwin\phoneBookwin\Database1.mdf;Integrated Security=True");
    con.Open();
        
    string value;
    bool friendCheck = groupFriends.Checked;
    bool familyCheck = groupFamily.Checked;
    bool emergencyCheck = groupEmergency.Checked;
    bool collCheck = groupColl.Checked;

    if (friendCheck)
        value = groupFriends.Text;
    else if (familyCheck)
        value = groupFamily.Text;
    else if (emergencyCheck)
        value = groupEmergency.Text;
    else if (collCheck)
        value = groupColl.Text;
    else
        value = "";

    SqlCommand cmd = new SqlCommand("insert into Contacts(Name, Contacts, Email, Group) values('" + createName.Text + "', '" + createNumber.Text + "', '" + createEmail.Text + "','"+value+"')", con);
    cmd.ExecuteNonQuery();

    this.Hide();
    Form1 save = new Form1();

    save.ShowDialog();
}
引发异常:

关键字“group”附近的语法不正确

这是我的数据库表:

CREATE TABLE [dbo].[Contacts] 
(
    [Name]     VARCHAR (50) NOT NULL,
    [Contacts] VARCHAR (50) NOT NULL,
    [Email]    VARCHAR (50) NULL,
    [Group]    VARCHAR (50) NULL,
    PRIMARY KEY CLUSTERED ([Name] ASC)
);

您的代码应该如下所示:

using(var con = new SqlConnection(@"...")
using(var cmd = new SqlCommand("insert into Contacts(Name, Contacts, Email, [Group]) VALUES(@na, @nu, @em, @gr)"), con){
    cmd.Parameters.Add("@na", SqlDbType.VarChar, 50).Value = createName.Text;
    cmd.Parameters.Add("@nu", SqlDbType.VarChar, 50).Value = createNumber.Text;
    cmd.Parameters.Add("@em", SqlDbType.VarChar, 50).Value = createEmail.Text;
    cmd.Parameters.Add("@gr", SqlDbType.VarChar, 50).Value = value;
    con.Open();
    cmd.ExecuteNonQuery();
}

它不仅现在看起来不像是一堆无法读取的字符串连接,而且可以安全地用于生产环境中,在生产环境中,有人称为
O'Connor
,,,”;更新用户集Role='Admin'其中Name='Caius'--
您的代码应该如下所示:

using(var con = new SqlConnection(@"...")
using(var cmd = new SqlCommand("insert into Contacts(Name, Contacts, Email, [Group]) VALUES(@na, @nu, @em, @gr)"), con){
    cmd.Parameters.Add("@na", SqlDbType.VarChar, 50).Value = createName.Text;
    cmd.Parameters.Add("@nu", SqlDbType.VarChar, 50).Value = createNumber.Text;
    cmd.Parameters.Add("@em", SqlDbType.VarChar, 50).Value = createEmail.Text;
    cmd.Parameters.Add("@gr", SqlDbType.VarChar, 50).Value = value;
    con.Open();
    cmd.ExecuteNonQuery();
}

它不仅现在看起来不像是一堆无法读取的字符串连接,而且可以安全地用于生产环境中,在生产环境中,有人称为
O'Connor
,,,”;UPDATE Users SET Role='Admin'WHERE Name='Caius'-

如果您想使用诸如
Group
之类的关键字作为列名,我相信您必须将其括在方括号中,如
[Group]
。此外,请使用参数化查询。您的代码可以接受SQL注入。请阅读-您的代码目前正遭受着您在使用数据库编码时可能犯的最大错误之一,这个错误可能会在您职业生涯的某个阶段导致您的公司被解雇,或者两者兼而有之。阅读SQL注入,不要再编写直接将用户提供的数据连接到SQL字符串中的SQL;没有必要这样做,因为它很容易避免。作为奖励,您的程序不会在每次有人输入撇号to时爆炸!其他问题:始终使用
处理连接对象。不要硬编码连接字符串,而是存储在设置配置文件中。考虑一下某人的名字或电子邮件的长度,它可能超过50个字符,使用实体框架,你的代码中几乎每一个问题都会消失,你不会浪费你的生活写无聊/重复的SQL,一次推一个字符串,你的程序会因为各种原因而变得更好。正如你的简历一样,如果你想使用像
Group
这样的关键字作为列名,我相信你必须把它用方括号括起来,像
[Group]
。另外,请使用参数化查询。您的代码可以接受SQL注入。请阅读-您的代码目前正遭受着您在使用数据库编码时可能犯的最大错误之一,这个错误可能会在您职业生涯的某个阶段导致您的公司被解雇,或者两者兼而有之。阅读SQL注入,不要再编写直接将用户提供的数据连接到SQL字符串中的SQL;没有必要这样做,因为它很容易避免。作为奖励,您的程序不会在每次有人输入撇号to时爆炸!其他问题:始终使用
处理连接对象。不要硬编码连接字符串,而是存储在设置配置文件中。考虑一下某人的名字或电子邮件的长度,它可能超过50个字符,使用实体框架,你的代码中几乎每一个问题都会消失,你不会浪费你的生活写无聊/重复的SQL,一次推一个字符串,你的程序会因为各种原因而变得更好。你的简历也是