C#插入数据时出现Unsupported异常,请求排查代码问题
解决SQL插入时的Unsupported异常问题
Hey there, let's break down why your code is throwing that Unsupported exception and fix it step by step:
1. 列名的语法错误
你的SQL语句里的列名e-mail包含连字符,SQL Server会把它当成e - mail(减法运算)来解析,这完全不符合你的意图,直接导致语法错误。解决方法是用方括号把特殊列名括起来,写成[e-mail]。
2. 直接拼接用户输入的致命问题
你现在直接把TextBox的内容拼接到SQL语句里,这不仅会引发SQL注入攻击(非常危险),而且如果用户输入里包含单引号(比如名字是O'Neil),会直接破坏SQL语句的结构,触发异常。必须用参数化查询来替代字符串拼接。
3. 连接对象的不当使用
你把SqlConnection定义为类级别的变量,每次点击按钮都打开连接,但没有确保连接被正确关闭和释放。这会导致连接池耗尽,也可能引发异常。正确的做法是用using语句,它会自动帮你释放连接资源。
修正后的代码示例
private void button1_Click(object sender, EventArgs e) { // 用using语句包裹连接,自动释放资源 using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Szymek\Desktop\Komunikator\Komunikator\Baza.mdf;Integrated Security=True")) { con.Open(); // 用参数化查询,并且正确处理特殊列名 string query = "INSERT INTO Uzytkownicy (imie, nazwisko, [e-mail], login, haslo) VALUES (@imie, @nazwisko, @email, @login, @haslo)"; using (SqlCommand cmd = new SqlCommand(query, con)) { // 添加参数,避免SQL注入和语法错误 cmd.Parameters.AddWithValue("@imie", textBox1.Text); cmd.Parameters.AddWithValue("@nazwisko", textBox2.Text); cmd.Parameters.AddWithValue("@email", textBox3.Text); cmd.Parameters.AddWithValue("@login", textBox4.Text); cmd.Parameters.AddWithValue("@haslo", textBox5.Text); // 执行插入操作 int rowsAffected = cmd.ExecuteNonQuery(); // 可以在这里添加插入成功的提示,比如MessageBox.Show("注册成功!"); } } }
另外补充一点:存储密码时绝对不要明文存储,应该用哈希算法(比如BCrypt、SHA256加盐)处理后再存入数据库,这是安全规范的基本要求哦。
内容的提问来源于stack exchange,提问作者Szymon
相关产品推荐
相关产品推荐

