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

如何从C#向SQL Server存储过程传递字符串NULL值

解决C#向SQL Server传递字符串NULL值的问题

你当前代码里的DBNull.Value.ToString()是错误的——这个调用会返回空字符串,而非SQL Server需要的NULL值,这就是你传递后得到空字段或'NULL'字符串的原因。以下是正确的解决方法:

直接传递正确的NULL标识

情况1:方法参数为object类型

如果Add_Dis中对应的参数是object类型,直接传递DBNull.Value即可,不要调用ToString():

Pat.Add_Dis(Convert.ToInt32(TXT_Dis_ID.Text), Convert.ToInt32(TXT_ID.Text), TXT_Dis_A.Text, DBNull.Value, A, TXT_NULL.Text);

情况2:方法参数为string类型

如果该参数是string类型,直接传null,SQL Server会自动将其映射为数据库中的NULL值:

Pat.Add_Dis(Convert.ToInt32(TXT_Dis_ID.Text), Convert.ToInt32(TXT_ID.Text), TXT_Dis_A.Text, null, A, TXT_NULL.Text);

关键注意事项

  • 确保SQL Server表中对应的字段允许NULL值(即未设置NOT NULL约束),否则传递NULL会触发数据库报错。
  • 如果Add_Dis是封装的SQL操作方法,必须用参数化查询实现,不能拼接SQL字符串。比如方法内部应该类似这样:
// Add_Dis内部的参数化实现示例
using (SqlCommand cmd = new SqlCommand("INSERT INTO YourTable (DisID, ID, DisA, TargetField, A, TxtNull) VALUES (@DisID, @ID, @DisA, @TargetField, @A, @TxtNull)", connection))
{
    cmd.Parameters.AddWithValue("@DisID", disID);
    cmd.Parameters.AddWithValue("@ID", id);
    cmd.Parameters.AddWithValue("@DisA", disA ?? DBNull.Value);
    cmd.Parameters.AddWithValue("@TargetField", targetField ?? DBNull.Value); // 自动将null转为DBNull.Value
    cmd.Parameters.AddWithValue("@A", a);
    cmd.Parameters.AddWithValue("@TxtNull", txtNull ?? DBNull.Value);
    cmd.ExecuteNonQuery();
}

内容的提问来源于stack exchange,提问作者ibrahem rmadan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:42:44