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

C#中如何在SQL查询中使用变量?示例代码是否正确?

在C#的SQL查询中使用变量的正确方式

首先明确:你贴的第一段代码完全不可行,问题出在这几点:

  1. SQLCommand语法错误:正确的构造方式应为new SqlCommand(sql语句, 连接对象),你写的SQLcommand CMD (insert into table (name,age) values (n, a);语法完全不符合C#规范。
  2. 直接在SQL字符串中写C#变量无效:SQL引擎会把n和a当成SQL自身的标识符,而非你定义的C#变量值,执行时会报错找不到对应列或变量。
  3. 这种写法存在SQL注入风险,若变量内容是恶意SQL片段,会直接执行,导致数据泄露或破坏。

正确的做法是使用参数化查询,也就是你提到的Parameters.AddWithValue(注意拼写是AddWithValue,你写的adwithvalue是错误的),更严谨的写法还可以指定参数类型,避免类型推断问题。

完整正确示例代码

string n = "jack";
int a = 23;
// 假设conn是已初始化好的SqlConnection对象
using (conn)
{
    conn.Open();
    // 用@name、@age作为SQL参数占位符
    string sql = "INSERT INTO [table] (name, age) VALUES (@name, @age)";
    using (SqlCommand cmd = new SqlCommand(sql, conn))
    {
        // 方式1:AddWithValue快速赋值
        cmd.Parameters.AddWithValue("@name", n);
        cmd.Parameters.AddWithValue("@age", a);

        // 方式2:指定参数类型(更推荐,避免类型匹配问题)
        // cmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = n;
        // cmd.Parameters.Add("@age", SqlDbType.Int).Value = a;
        
        cmd.ExecuteNonQuery();
    }
}

参数化查询的优势

  • 彻底杜绝SQL注入攻击,保障数据安全。
  • 无需手动处理字符串转义(比如名字含单引号的场景)。
  • 允许SQL引擎缓存查询计划,提升重复执行时的性能。

内容的提问来源于stack exchange,提问作者gohar iranian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:04:58