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();
}
上記のコードでは、delete_existingはDB内で常に1または0です。 Convert.ToBoolean()が有効な入力として1または0を受け入れないことをMSDNで読みました。 trueまたはfalseのみを受け入れます。 DB値をboolに変換する別の方法はありますか?または、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を使用して列をビットに変更してから読み取ります。
例:
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);