c# - 从数据库读取 bool 值?

标签 c# .net sqldatareader

在 C# 中,使用 SqlDataReader,有没有办法从数据库中读取 bool 值?

while (reader.Read())
{
    destPath = reader["destination_path"].ToString();
    destFile = reader["destination_file"].ToString();
    createDir = reader["create_directory"].ToString();
    deleteExisting = Convert.ToBoolean(reader["delete_existing"]);
    skipIFolderDate = reader["skipifolderdate"].ToString();
    useTempFile = reader["useTempFile"].ToString();
    password = reader["password"].ToString();
}

在上面的代码中,delete_existing 在数据库中始终为 1 或 0。我在 MSDN 上读到 Convert.ToBoolean() 不接受 1 或 0 作为有效输入。它只接受真或假。有没有其他方法可以将 DB 值转换为 bool 值?还是我需要在 SqlDataReader 之外执行此操作?

此外,我无法更改 DB 值,因此请不要回答“将 DB 值从 1 和 0 更改为 true 和 false”。

谢谢!

最佳答案

如果 delete_existing 的类型是 sqlserver 'bit' 类型,你可以这样做:

var i = reader.GetOrdinal("delete_existing"); // Get the field position
deleteExisting = reader.GetBoolean(i);

或者(但是如果delete_existing可以是DBNull它会崩溃)

deleteExisting = (bool)reader["delete_existing"];

或者更好的是,下面这个是 DBNull 证明,如果列是 DBNull

则返回 false
deleteExisting = reader["delete_existing"] as bool? ?? false;

否则如果数据库类型是int :

deleteExisting = (reader["delete_existing"] as int? == 1) ? true : false;

或者如果它是一个varchar

deleteExisting = (reader["delete_existing"] as string == "1") ? true : false;

关于c# - 从数据库读取 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941736/

相关文章:

C# - 如何使 AutoMapper 不区分大小写?

c# - Swagger 5.0 - IDocumentFilter(SwaggerDocument 到 OpenApiDocument)自定义 "Definitions"

c# - 使用在锁定工作站上打开的应用程序登录 Windows 7

c# - 使用 SMTP 在邮件正文中发送多个文本框值

c# - 在 SQL Server 中反汇编位标志枚举

c# - SqlDataReader 在项目之间的行为不同

c# - 如果 DataReader 返回两个结果集,则使用 DataTable.Load() 方法不起作用

c# - 如果我正在调用 SqlReader.Read,我应该调用 SqlDataReader.HasRows

c# - WinForms:从其变量名中获取某个按钮

c# - 从同步方法调用异步方法