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

如何解决读取SQL表列时List.Add的Possible null reference警告?

解决C#读取SQL表列时的空引用警告问题

原代码

public List<string> GetColumns(string tableName)
{
   var columns = new List<string>();          
   using (var conn = new SqlConnection(SqlServerConnectionString))
   {
      conn.Open();
      var selectQuery = $"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{tableName}'";
      using (var cmd = new SqlCommand(selectQuery, conn))
      {
           using (var reader = cmd.ExecuteReader())
           {                 
                while (reader.Read())
                {
                    columns.Add(reader["COLUMN_NAME"].ToString());
                }
           }                            
      }                   
      conn.Close();
   }
   return columns;
}

收到的警告

Possible null reference argument for parameter 'item' in 'void List.Add(string item)'

问题原因

警告源于reader["COLUMN_NAME"]可能返回DBNull.Value(即便INFORMATION_SCHEMA.COLUMNS里的COLUMN_NAME理论上非空,编译器也无法确认这一点),此时调用ToString()会得到null;在启用可为空引用类型的项目中,List<string>.Add不接受null参数,因此触发警告。

解决方案

方案1:用Convert.ToString()自动处理

Convert.ToString()能识别DBNull.Value并返回空字符串而非null,直接替换原有代码即可:

columns.Add(Convert.ToString(reader["COLUMN_NAME"]));

方案2:显式检查DBNull

如果需要自定义处理逻辑(比如跳过空值),可以手动判断:

var columnValue = reader["COLUMN_NAME"];
if (columnValue != DBNull.Value)
{
    columns.Add(columnValue.ToString());
}
// 若不想跳过空值,用空字符串替代
columns.Add(columnValue != DBNull.Value ? columnValue.ToString() : string.Empty);

方案3:结合null合并运算符简化

用as关键字转换后,配合null合并运算符快速处理:

var columnName = reader["COLUMN_NAME"] as string;
columns.Add(columnName ?? string.Empty);

额外安全提示

原代码存在SQL注入风险,直接拼接tableName到SQL语句中是不安全的,建议改用参数化查询:

// 替换查询语句与参数赋值部分
var selectQuery = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName";
using (var cmd = new SqlCommand(selectQuery, conn))
{
    cmd.Parameters.AddWithValue("@TableName", tableName);
    // 后续读取逻辑保持不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:01:17