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

如何在C#字符串插值中处理SQL参数的Null值输出

实现SQL字符串拼接时null值无引号输出

问题场景

现有C#代码如下:

var firstName = "Greg";
var ipAddress = "0.0.0.0";

var sql = @$"sp_create_enrollment @first_name = '{firstName}',
        @ip_address = '{ipAddress}'";

Console.WriteLine(sql);

正常输出为:

sp_create_enrollment @first_name = 'Greg', @ip_address = '0.0.0.0'

需要实现:当ipAddress为null时,输出结果中@ip_address的值为不带引号的null,即:

sp_create_enrollment @first_name = 'Greg', @ip_address = null

解决方案

1. 字符串插值中用三元运算符判断

直接在插值表达式内判断ipAddress是否为null,动态生成对应内容:

var firstName = "Greg";
string? ipAddress = null; // 测试null场景

var sql = @$"sp_create_enrollment @first_name = '{firstName}',
        @ip_address = {ipAddress is null ? "null" : $"'{ipAddress}'"}";

Console.WriteLine(sql);

运行后输出符合预期的结果:

sp_create_enrollment @first_name = 'Greg', @ip_address = null

如果需要同时处理空字符串(比如空字符串也输出null),可将判断条件改为string.IsNullOrEmpty(ipAddress):

var sql = @$"sp_create_enrollment @first_name = '{firstName}',
        @ip_address = {string.IsNullOrEmpty(ipAddress) ? "null" : $"'{ipAddress}'"}";

2. 生产环境推荐:使用参数化查询

注意:直接拼接SQL字符串存在SQL注入风险,不建议在生产环境使用。更安全的方式是用参数化存储过程调用,自动处理null值:

using var connection = new SqlConnection("你的数据库连接字符串");
connection.Open();

var cmd = new SqlCommand("sp_create_enrollment", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@first_name", firstName);
// 当ipAddress为null时,传入DBNull.Value
cmd.Parameters.AddWithValue("@ip_address", ipAddress ?? DBNull.Value);

cmd.ExecuteNonQuery();

这种方式无需手动拼接字符串,数据库会正确识别null参数,同时彻底避免SQL注入问题。

内容的提问来源于stack exchange,提问作者Greg Gum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:15:52