Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL DataReader如何显示查询中的空值_C#_Sql_Stringbuilder_Datareader - Fatal编程技术网

C# SQL DataReader如何显示查询中的空值

C# SQL DataReader如何显示查询中的空值,c#,sql,stringbuilder,datareader,C#,Sql,Stringbuilder,Datareader,我有一个DataReader和一个StringBuilder(C#.NET),使用方式如下: while (reader.Read()) { sb.AppendFormat("{0},{1},{2},",reader["Col1"], reader["Col2"], reader["Col3"]); } 这对我来说非常有用,但是当一行为null时,我需要它返回“null”,而不是仅仅返回“”。实现这一点的好方法是什么 非常感谢您的建议请尝试: reader["Col1"] == DBN

我有一个DataReader和一个StringBuilder(C#.NET),使用方式如下:

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader["Col1"], reader["Col2"], reader["Col3"]);
}
这对我来说非常有用,但是当一行为null时,我需要它返回“null”,而不是仅仅返回“”。实现这一点的好方法是什么

非常感谢您的建议

请尝试:

reader["Col1"] == DBNull.Value ? "null" : Convert.ToString(reader["Col1"])
或者,如果要重复使用此方法,这可能是一种适用于范围严格的扩展方法的理想选择,例如:

public static class ExtensionMethods
{
    public static object GetValueOrNull(this SqlDataReader reader, string key)
    {
        return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key];
    }
}
这样你就可以写:

var valueOfReader = reader.GetValueOrNull("Col1");
如果您需要在一个
StringBuilder.AppendFormat
call中多次使用此逻辑,那么这无疑会使事情变得更整洁:

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3"));
}
尝试:

或者,如果要重复使用此方法,这可能是一种适用于范围严格的扩展方法的理想选择,例如:

public static class ExtensionMethods
{
    public static object GetValueOrNull(this SqlDataReader reader, string key)
    {
        return Convert.IsDBNull(reader[key]) ? (object)"null" : reader[key];
    }
}
这样你就可以写:

var valueOfReader = reader.GetValueOrNull("Col1");
如果您需要在一个
StringBuilder.AppendFormat
call中多次使用此逻辑,那么这无疑会使事情变得更整洁:

while (reader.Read())
{
    sb.AppendFormat("{0},{1},{2},",reader.GetValueOrNull("Col1"), reader.GetValueOrNull("Col2"), reader.GetvalueOrNull("Col3"));
}

我投票删除了我的答案,答案是一样的。我迟到了几秒钟!我投票删除了我的答案,答案是一样的。我迟到了几秒钟!回答得好!非常感谢您花时间编写所有这些内容。当然,如果您确实使用扩展方法路线,如果它为null,您可以返回任何内容(例如您传入的值),而不仅仅是“null”-这将使它更灵活=)简单的代码工作得很好,但是“this SqlDataReader”在静态上下文中不起作用。以及“当前上下文中不存在名称‘reader’”。您是否对如何修复这些问题有快速的评论?不幸的是,我在这里是个新手。啊,我的错-对不起,我错过了一些东西-我已经相应地编辑了扩展方法:)@Rob-谢谢你花时间!我非常感激。我设法让你的代码正常工作。回答得很好!非常感谢您花时间编写所有这些内容。当然,如果您确实使用扩展方法路线,如果它为null,您可以返回任何内容(例如您传入的值),而不仅仅是“null”-这将使它更灵活=)简单的代码工作得很好,但是“this SqlDataReader”在静态上下文中不起作用。以及“当前上下文中不存在名称‘reader’”。您是否对如何修复这些问题有快速的评论?不幸的是,我在这里是个新手。啊,我的错-对不起,我错过了一些东西-我已经相应地编辑了扩展方法:)@Rob-谢谢你花时间!我非常感激。我设法让你的代码正常工作。