9

私は自分のコードをできるだけコンパクトにしようとしました。

Microsoft SQL Server、.NET2.0を使用する

データベースにnull値を受け入れる日付フィールドがあります

LeaseExpiry(datetime, null)

テキストボックスの値を取得して、日時に変換します。

DateTime leaseExpiry = Convert.ToDateTime(tbLeaseExpiry.Text);

INSERT_record(leaseExpiry);

私が抱えている問題は、フォームが送信され、テキストボックスが空の場合です。このエラーが返されます:

文字列が有効な日時として認識されませんでした。

テキストボックスが空の場合に行がデータベースに作成されるようにコードを設定するにはどうすればよいNULLですか?

変数をNULLに初期化しようとしましたが、VisualStudioでエラーが発生します

DateTime leaseExpiry = null;

null不可能な値型であるため、nullを「System.DateTime」に変換できません。

これが役立つ場合のデータアクセス層です

public string INSERT_record(DateTime leaseExpiry)
{
     //Connect to the database and insert a new record 
     string cnn = ConfigurationManager.ConnectionStrings[connname].ConnectionString;

     using (SqlConnection connection = new SqlConnection(cnn))
     {
        string SQL = string.Empty;
        SQL = "INSERT INTO [" + dbname + "].[dbo].[" + tblAllProperties + "] ([LeaseExpiry]) VALUES (@leaseExpiry);

         using (SqlCommand command = new SqlCommand(SQL, connection))
         {
                command.Parameters.Add("@leaseExpiry", SqlDbType.DateTime);
                command.Parameters["@leaseExpiry"].Value = leaseExpiry;
         }

         try
         {
                connection.Open();
                command.ExecuteNonQuery();
                return "Success";
         }
         catch (Exception ex)
         {
                return ex.Message;
         }
     }
}

ありがとうございました

4

4 に答える 4

16

確かに、DateTimeすることはできませんnull。しかし:DateTime?することができます。nullパラメータでは、 「送信しない」を意味することにも注意してください。あなたが必要とするでしょう:

public string INSERT_record(DateTime? leaseExpirey)
{
    // ...
    command.Parameters.Add("@leaseExpirey", SqlDbType.DateTime);
    command.Parameters["@leaseExpirey"].Value =
                ((object)leaseExpirey) ?? DBNull.Value;
    // ...
}
于 2013-01-25T12:27:03.573 に答える
5

null 許容の DateTime と TryParse() を使用してみてください

DateTime? leaseExpirey = null;
DateTime d;
if(DateTime.TryParse(tbLeaseExpiry.Text, out d))
{
    leaseExpirey = d;
}

INSERT_record(leaseExpirey);
于 2013-01-25T12:32:18.107 に答える
3

leaseExpireynullableを作成できますDateTime-つまりDateTime? leaseExpirey

次に、次のように言うことができます。

DateTime? leaseExpirey;
if (!string.IsNullOrEmpty(tbLeaseExpiry.Text.Trim()))
    leaseExpirey = Convert.ToDateTime(tbLeaseExpiry.Text);

INSERT_record(leaseExpirey);

の代わりにパラメーターINSERT_recordを受け入れるように変更する必要もあります。DateTime?DateTime

于 2013-01-25T12:28:12.993 に答える
0

DateTime.MinValueDateTime は never であるため、を使用する必要がありnullます。

于 2013-01-25T12:38:10.317 に答える