如何在C#的DataSet数据行中检查DBMSType键是否存在
检查DataSet行中DBMSType列是否存在的C#实现
直接访问DBMSType列如果不存在会抛出ArgumentException,以下是两种可靠的检查实现方式:
方法一:通过DataTable的Columns.Contains检查列存在性
string filename = @"D:\service\configfile.json"; DataSet data = JsonConvert.DeserializeObject<DataSet>(File.ReadAllText(filename)); if (data.Tables[0].Rows.Count > 0) { DataRow firstRow = data.Tables[0].Rows[0]; // 先检查表中是否包含目标列 if (data.Tables[0].Columns.Contains("DBMSType")) { var n = firstRow["DBMSType"].ToString(); // 在这里添加获取到值后的业务逻辑 } else { // 列不存在时的处理逻辑,例如抛出异常、记录日志或设置默认值 // throw new InvalidOperationException("配置文件中缺少必填的DBMSType列"); } }
方法二:结合TryGetValue处理列存在性与值获取
这种方式同时处理列存在性和值是否可获取的场景:
string filename = @"D:\service\configfile.json"; DataSet data = JsonConvert.DeserializeObject<DataSet>(File.ReadAllText(filename)); if (data.Tables[0].Rows.Count > 0) { DataRow firstRow = data.Tables[0].Rows[0]; object dbmsTypeValue; // 先确认列存在,再尝试获取值 if (firstRow.Table.Columns.Contains("DBMSType") && firstRow.TryGetValue("DBMSType", out dbmsTypeValue)) { // 处理可能的null值,避免ToString()抛出空引用异常 var n = dbmsTypeValue?.ToString() ?? string.Empty; // 后续业务逻辑 } else { // 列不存在或值无法获取时的处理 } }
关键说明
Columns.Contains("DBMSType")是核心检查逻辑,确保目标列在DataTable中定义- 方法二中的
TryGetValue还能处理列存在但值为DBNull的情况,同时用?.ToString() ?? string.Empty避免空引用异常
内容的提问来源于stack exchange,提问作者Nasik Ahd
相关产品推荐
相关产品推荐

