C#中如何在SQL查询中使用变量?示例代码是否正确?
在C#的SQL查询中使用变量的正确方式
首先明确:你贴的第一段代码完全不可行,问题出在这几点:
- SQLCommand语法错误:正确的构造方式应为
new SqlCommand(sql语句, 连接对象),你写的SQLcommand CMD (insert into table (name,age) values (n, a);语法完全不符合C#规范。 - 直接在SQL字符串中写C#变量无效:SQL引擎会把
n和a当成SQL自身的标识符,而非你定义的C#变量值,执行时会报错找不到对应列或变量。 - 这种写法存在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
相关产品推荐
相关产品推荐

