【发布时间】: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处理您的连接对象。 AvoidAttachDbFileName。不要硬编码连接字符串,而是存储在设置配置文件中。考虑某人的姓名或电子邮件可以有多长,可能超过 50 个字符 -
或者,使用实体框架,您代码中的几乎所有问题都会消失,您不会浪费时间编写无聊/重复的 SQL 来一次推送一个字符串,并且您的出于多种原因,您的简历会变得更好
标签: c# sql-server radio-button