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

C#更新MariaDB数据库时出现SQL语法错误,求解决方案

解决MariaDB UPDATE语句的语法错误问题

咱们先看你遇到的报错内容:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near "test WHERE Gebr_id = 1' at line 1

这个错误的根源非常明确——你的SQL语句里**Telenummer字段的赋值没有闭合单引号**。来看看你写的代码片段:

string updateQuery = "UPDATE gebruikers SET Naam='" + txtNaam.Text + "', Voornaam='" + txtVoornaam.Text + "', Geboortedatum='" + txtGeboortedatum.Text + "', Email='" + txtEmail.Text + "', Gebruikernaam='" + txtGebruikersnaam.Text + "', Wachtwoord='" + txtWachtwoord.Text + "', Straat='" + txtStraat.Text + "', Huisbus='" + txtHuisbus.Text + "', Postcode='" + txtPostcode.Text + "', Plaats='" + txtPlaats.Text + "', Telenummer='" + txtTelefoonnummer.Text +" WHERE Gebr_id = " + int.Parse(txtID.Text);

注意最后一个字段Telenummer的部分:Telenummer='" + txtTelefoonnummer.Text +" WHERE...,这里在txtTelefoonnummer.Text后面直接接了WHERE,却没加闭合的单引号,导致数据库无法正确解析SQL的结构,自然抛出语法错误。

第一步:先修复语法错误

把缺失的单引号补上就行,修正后的代码片段如下:

string updateQuery = "UPDATE gebruikers SET Naam='" + txtNaam.Text + "', Voornaam='" + txtVoornaam.Text + "', Geboortedatum='" + txtGeboortedatum.Text + "', Email='" + txtEmail.Text + "', Gebruikernaam='" + txtGebruikersnaam.Text + "', Wachtwoord='" + txtWachtwoord.Text + "', Straat='" + txtStraat.Text + "', Huisbus='" + txtHuisbus.Text + "', Postcode='" + txtPostcode.Text + "', Plaats='" + txtPlaats.Text + "', Telenummer='" + txtTelefoonnummer.Text + "' WHERE Gebr_id = " + int.Parse(txtID.Text);
executeMyQuery(updateQuery);

(重点看最后:txtTelefoonnummer.Text + "' WHERE,补上了之前缺失的单引号)

第二步:强烈建议改用参数化查询

虽然上面的修复能解决当前的语法问题,但字符串拼接SQL的写法存在严重的SQL注入风险——比如如果用户输入的内容里包含单引号(比如名字是O'Neil),你的SQL又会报错,甚至可能被恶意攻击者利用篡改数据库。

换成参数化查询的写法,既能彻底避免SQL注入,又能自动处理单引号这类语法细节,示例如下:

string updateQuery = @"UPDATE gebruikers 
                       SET Naam=@Naam, Voornaam=@Voornaam, Geboortedatum=@Geboortedatum,
                           Email=@Email, Gebruikernaam=@Gebruikernaam, Wachtwoord=@Wachtwoord,
                           Straat=@Straat, Huisbus=@Huisbus, Postcode=@Postcode,
                           Plaats=@Plaats, Telenummer=@Telenummer
                       WHERE Gebr_id = @Gebr_id";

// 假设你使用的是MariaDB官方驱动的连接对象
using(var cmd = new MySqlCommand(updateQuery, yourDatabaseConnection))
{
    cmd.Parameters.AddWithValue("@Naam", txtNaam.Text);
    cmd.Parameters.AddWithValue("@Voornaam", txtVoornaam.Text);
    cmd.Parameters.AddWithValue("@Geboortedatum", txtGeboortedatum.Text);
    cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
    cmd.Parameters.AddWithValue("@Gebruikernaam", txtGebruikersnaam.Text);
    cmd.Parameters.AddWithValue("@Wachtwoord", txtWachtwoord.Text);
    cmd.Parameters.AddWithValue("@Straat", txtStraat.Text);
    cmd.Parameters.AddWithValue("@Huisbus", txtHuisbus.Text);
    cmd.Parameters.AddWithValue("@Postcode", txtPostcode.Text);
    cmd.Parameters.AddWithValue("@Plaats", txtPlaats.Text);
    cmd.Parameters.AddWithValue("@Telenummer", txtTelefoonnummer.Text);
    cmd.Parameters.AddWithValue("@Gebr_id", int.Parse(txtID.Text));
    
    cmd.ExecuteNonQuery();
}

这种写法不仅更安全,后续维护和修改字段也会更方便,不用再手动处理字符串拼接的各种细节。

内容的提问来源于stack exchange,提问作者kyle vdk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:34:36