SQL Server DateTime Accept NULL

c#, sql-server

Solution

Indeed, `DateTime` cannot be `null`. But: `DateTime?` can be. Note also that on a parameter, `null` means "don't send"; you would need:

public string INSERT_record(DateTime? leaseExpirey)
{
    // ...
    command.Parameters.Add("@leaseExpirey", SqlDbType.DateTime);
    command.Parameters["@leaseExpirey"].Value =
                ((object)leaseExpirey) ?? DBNull.Value;
    // ...
}

Problem

I've tried to make my code as compact as possible. Using Microsoft SQL Server, .NET 2.0 I have a date field in my database which accepts null values ``` LeaseExpiry(datetime, null) ``` I grab the value of the the textbox and convert it to datetime. ``` DateTime leaseExpiry = Convert.ToDateTime(tbLeaseExpiry.Text); INSERT_record(leaseExpiry); ``` The problem I'm having is if the form is submitted and the textbox is empty. I get this error back: String was not recognized as a valid DateTime. How do I set my code up so that if the textbox is empty, the row is created in the database with `NULL`? I've tried initializing my variable to NULL but get an error in Visual Studio ``` DateTime leaseExpiry = null; ``` Cannot convert null to 'System.DateTime' because it is a non-nullable value type. Here's the Data Access Layer if that helps ``` 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; } } } ``` Thank you

Original source