我想知道如何检查字段是否包含空值并将其替换为文本N / A或者不显示该字段。但是,如果字段包含null,我不希望代码中断,我希望它继续,直到所有字段都填充了一个值。
C#代码
using (var connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
using (var command = connection.CreateCommand())
{
command.CommandText = "SELECT FirstName, LastName, Date FROM EOI WHERE (FormID = '13')";
connection.Open();
using (var reader = command.ExecuteReader())
{
while(reader.Read())
{
Label1.Text = reader["FirstName"].ToString();
Label2.Text = reader["LastName"].ToString();
DateTime Text = Convert.ToDateTime(reader["Date"]);
Label3.Text = Text.ToString("d");
}
}
}
答案 0 :(得分:1)
您可以在C#中查看:
if(reader["FirstName"]==null)
{
// Do something
}
或带有ISNULL的T-SQL:
SELECT ISNULL(FirstName,'N/A'), ISNULL(LastName,'N/A'), Date FROM EOI
答案 1 :(得分:1)
我假设您遇到问题的空值是Date
列。 C#中的DateTime不能为null,因为它是一个struct。您可能希望将其转换为可为空的DateTime:
DateTime? date = (DateTime?)reader["Date"];
现在由您将其转换为字符串时执行逻辑:
dateLabel.Text = date != null ? date.Value.ToString("d") : "N/A";
对于字符串列,只需重写它,因为字符串已经可以为空:
firstNameLabel.Text = (string)reader["FirstName"] ?? "N/A";
答案 2 :(得分:0)
您可以签入您的select语句或代码。在SQL中:
SELECT IsNull(FirstName, 'N/A') as FirstName,
Coalesce(LastName, 'N/A') as LastName, Date FROM EOI WHERE (FormID = '13');
在.Net中,您需要将其与DbNull.Value进行比较:
Label1.Text = reader["FirstName"] == DBNull.Value ? "N/A" : Convert.ToString(reader["FirstName"]);
请注意,在上面的示例中,Convert.ToString()会将空值转换为空字符串。这是你可以做的第三个例子。
答案 3 :(得分:0)
如果您事先知道类型,可以使用(伪代码,因为我在iPhone上输入):
KnownType myData = reader.IsDbNull(fieldname)? MyDefaultValue:reader.GetKnownType(fieldname)
E.g。 String myData = reader.IsDbNull(fieldname)? “”:reader.GetString(fieldname)
String dateValue = reader.IsDbNull(fieldname)? “没有日期”:reader.GetDate(fieldname).ToString()
这更有效并且最小化了铸造。为了获得最大效率,您还应该使用字段索引而不是字段名称。每次使用字段名称时,都必须计算索引: 读者(“日期”)是reader.GetValue(reader.GetOrdinal(“Date”))