reader.GetDateTime(null)

3xG*_*Guy 3 c# sql

我正在开发一个将从存储过程读取并放入工作表的应用程序。我的问题是,当我遇到null时,代码中未对其进行处理。

               while (reader.Read())
               {

                   ws.Cells[i, 1] = reader.GetString(0);
                   ws.Cells[i, 2] = reader.GetString(1);
                   ws.Cells[i, 3] = reader.GetString(2);
                   ws.Cells[i, 4] = reader.GetString(3);
                   ws.Cells[i, 5] = reader.GetString(4);
                   ws.Cells[i, 6] = reader.GetString(5);
                   ws.Cells[i, 7] = reader.GetDecimal(6);
                   ws.Cells[i, 8] = reader.GetDateTime(7);
                   ws.Cells[i, 9] = reader.GetDecimal(8);
                   ws.Cells[i, 10] = reader.GetDecimal(9);
                   ws.Cells[i, 11] = reader.GetDecimal(10);
                   ws.Cells[i, 12] = reader.GetDecimal(11);
                   ws.Cells[i, 13] = reader.GetDateTime(12);
                   ws.Cells[i, 13] = reader.GetDateTime(13);
                   i++;
               }
               reader.Close();
Run Code Online (Sandbox Code Playgroud)

如果有人可以解释如何处理,以便我们只将单元格留空;谢谢!!

Pra*_*ose 5

您可以使用reader.IsDBNull检查值是否为空并在代码中编写条件逻辑。

if (reader.IsDbBull(12)) {
    ws.Cells[i, 13] = "";
} else {
    ws.Cells[i, 13] = reader.GetDateTime(12);
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*haw 5

您可以用来reader.IsDBNull(int)在尝试从中读取值之前检查该字段是否为空。

例如

ws.Cells[i, 1] = reader.IsDBNull(0) ? "Default value when null" : reader.GetString(0);
Run Code Online (Sandbox Code Playgroud)