Mr.*_*Ant 15 .net c# sqldatareader
在C#中,使用SqlDataReader,有没有办法从DB读取布尔值?
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();
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,delete_existing在DB中始终为1或0.我在MSDN上读到,Convert.ToBoolean()不接受1或0作为有效输入.它只接受真或假.有没有其他方法将DB值转换为bool?或者我是否需要在SqlDataReader之外执行此操作?
另外,我无法更改数据库值,所以请不要回答"将数据库值从1和0更改为true和false".
谢谢!
Lar*_*rry 37
如果类型delete_existing是sqlserver'bit'类型,你可以这样做:
var i = reader.GetOrdinal("delete_existing"); // Get the field position
deleteExisting = reader.GetBoolean(i);
Run Code Online (Sandbox Code Playgroud)
或(但如果delete_existing可能会崩溃DBNull)
deleteExisting = (bool)reader["delete_existing"];
Run Code Online (Sandbox Code Playgroud)
或者更好,这一个是DBNull证明,如果列是,则返回falseDBNull
deleteExisting = reader["delete_existing"] as bool? ?? false;
Run Code Online (Sandbox Code Playgroud)
否则,如果数据库类型是int:
deleteExisting = (reader["delete_existing"] as int? == 1) ? true : false;
Run Code Online (Sandbox Code Playgroud)
或者如果是 varchar
deleteExisting = (reader["delete_existing"] as string == "1") ? true : false;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34899 次 |
| 最近记录: |