【问题标题】:C# radio button SQL ServerC# 单选按钮 SQL Server
【发布时间】:2021-06-17 12:03:40
【问题描述】:

我不知道这段代码有什么问题。在添加单选按钮之前它工作得很好。还有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();
}

抛出异常:

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

这是我的数据库表:

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

【问题讨论】:

  • 如果你想使用Group这样的关键字作为列名,我相信你必须将它包裹在方括号中,比如[Group]。另外,请使用参数化查询。您的代码对 SQL 注入开放。
  • 请阅读bobby-tables.com - 您的代码目前正遭受使用数据库编码时可能犯的最大错误之一,这个错误可能会在您职业生涯的某个阶段将您的公司带到@987654322 @,你被解雇了,或者两者兼而有之。阅读 SQL 注入,永远不要再写一个直接将用户提供的数据连接成 SQL 字符串的 sql;从来没有必要这样做,因为它很容易避免。作为奖励,您的程序不会在每次有人输入撇号时爆炸!
  • 更多问题:始终使用using 处理您的连接对象。 Avoid AttachDbFileName。不要硬编码连接字符串,而是存储在设置配置文件中。考虑某人的姓名或电子邮件可以有多长,可能超过 50 个字符
  • 或者,使用实体框架,您代码中的几乎所有问题都会消失,您不会浪费时间编写无聊/重复的 SQL 来一次推送一个字符串,并且您的出于多种原因,您的简历会变得更好

标签: c# sql-server radio-button


【解决方案1】:

您的代码应如下所示:

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'-- 的生产环境中使用它是安全的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2016-01-10
    相关资源
    最近更新 更多