1

フィールドに null 値が含まれているかどうかを確認し、それをテキスト N/A に置き換えるか、フィールドを表示しないようにする方法を知りたいです。しかし、フィールドに null が含まれている場合にコードを壊したくありません。すべてのフィールドに値が入力されるまでコードを続行したいのです。

C# コード

using (var connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
    using (var command = connection.CreateCommand())
    {
        command.CommandText = "SELECT FirstName, LastName, Date FROM EOI WHERE (FormID = '13')";
        connection.Open();
        using (var reader = command.ExecuteReader())
        {
            while(reader.Read())
            {
                Label1.Text = reader["FirstName"].ToString();
                Label2.Text = reader["LastName"].ToString();
                DateTime Text = Convert.ToDateTime(reader["Date"]);
                Label3.Text = Text.ToString("d");
            }
        }
    }
4

4 に答える 4

1

これは C# で確認できます。

if(reader["FirstName"]==null)
{
 // Do something
}

またはISNULLを使用した T-SQL で:

SELECT ISNULL(FirstName,'N/A'), ISNULL(LastName,'N/A'), Date FROM EOI
于 2013-10-19T06:36:48.127 に答える
1

問題が発生する null 値はDate列であると想定しています。C# の DateTime は構造体であるため、null にすることはできません。代わりに、null 可能な DateTime にキャストする必要があります。

DateTime? date = (DateTime?)reader["Date"];

これを文字列に変換するときにロジックを実行するのはあなた次第です。

dateLabel.Text = date != null ? date.Value.ToString("d") : "N/A";

文字列列の場合、文字列はすでに null 可能であるため、次のように書き換えるだけです。

firstNameLabel.Text = (string)reader["FirstName"] ?? "N/A";
于 2013-10-19T06:37:57.333 に答える
0

事前にタイプがわかっている場合は、使用できます(iPhoneで入力している疑似コード):

KnownType myData = reader.IsDbNull(フィールド名) ? MyDefaultValue : reader.GetKnownType(フィールド名)

例 String myData = reader.IsDbNull(fieldname) ? "" : reader.GetString(フィールド名)

文字列 dateValue = reader.IsDbNull(フィールド名) ? 「日付なし」: reader.GetDate(フィールド名).ToString()

これはより効率的で、キャストを最小限に抑えます。最大限の効率を得るには、フィールド名ではなくフィールド インデックスも使用する必要があります。フィールド名を使用するたびに、インデックスを計算する必要があります: reader("Date") is reader.GetValue(reader.GetOrdinal("Date"))

于 2013-10-19T08:31:53.680 に答える
0

selectステートメントまたはコードでチェックインできます。SQL では:

SELECT IsNull(FirstName, 'N/A') as FirstName, 
        Coalesce(LastName, 'N/A') as LastName, Date FROM EOI WHERE (FormID = '13');

.Net では、それを DbNull.Value と比較する必要があります。

Label1.Text = reader["FirstName"] == DBNull.Value ? "N/A" :  Convert.ToString(reader["FirstName"]);

上記の例では、Convert.ToString() が null を空の文字列に変換することに注意してください。これは、できることの 3 番目の例です。

于 2013-10-19T06:39:14.123 に答える