You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:37