簡體   English   中英

從數據庫讀取布爾值?

[英]Read boolean values from DB?

在C#中,使用SqlDataReader,有沒有辦法從數據庫讀取布爾值?

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值轉換為布爾值的替代方法? 還是我需要在SqlDataReader之外執行此操作?

另外,我無法更改DB值,因此請不要回答“將DB值從1和0更改為true和false”。

謝謝!

如果delete_existing的類型是sqlserver的“位”類型,則可以執行以下操作:

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;

投放工作:myVar =(bool)dataReader [“ myColumn”];

如果要在SELECT中使用CASE並希望使用GetBoolean,請在讀取之前使用CAST將列更改為bit。

例如:

SELECT CAST((CASE WHEN [Condition] THEN 1 ELSE 0 END) as bit) FROM Table_Name

那么你可以使用

reader.GetBoolean(0)

這個怎么樣?

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

布爾值可能是將某物轉換為的簡單類型。 這是“ Y”,“ N”版本:

deleteExisting = string.Equals(reader["delete_existing"] as string, "Y", StringComparision.OrdinalIgnoreCase);
deleteExisting = reader.GetBoolean(reader["delete_existing"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM