2017-12-16 37 views
1

Ich habe 3 Textfelder in meiner App. der dritte ist für das Geburtsdatum, welcher Benutzer leer halten kann.NULL in SQL Server Datetime Spalte mit vb.net in asp.net zuweisen

Die App speichert die vom Benutzer eingegebenen Werte in eine SQL Server-Datenbank mit einer Tabelle mit 3 Spalten. Der Datentyp der Geburtstagsspalte ist auf Date festgelegt und als Nullable definiert.

Wenn der Benutzer hält der Geburtstag Textbox leer, möchte ich NULL in die birthday Spalte zuweisen, so habe ich versucht, diesen Code:

If txtBirthday.Text = "" Then 
    command.Parameters.AddWithValue("@Field3", DBNull.value) 
End If 

Aber das hat nicht funktioniert. Ich habe auch versucht (nach der Zugabe von Imports System.Data.SqlTypes):

If txtBirthday.Text = "" Then 
    command.Parameters.AddWithValue("@Field3", SqlDateTime.Null) 
End If 

Aber das auch nicht funktioniert.

Ich suchte nach einer Lösung für das Problem, aber keinen Erfolg.

Bitte helfen

Hier ist mein voller Code:

Dim Query As String = "INSERT INTO UserInfo (fName, lName, bDay) VALUES (@Field1, @Field2, @Field3);" 
Dim connectionString = ConfigurationManager.ConnectionStrings("myapp_con_string").ConnectionString 
Using connection As New SqlConnection(connectionString) 
    Dim command As New SqlCommand(Query, connection) 
    With command 
     .Connection = connection 
     .CommandType = CommandType.Text 
     .CommandText = Query 
     .Parameters.AddWithValue("@Field1", txtFirstname.Text) 
     .Parameters.AddWithValue("@Field2", txtLastname.Text) 
     If txtBirthday.Text = "" Then 
      command.Parameters.AddWithValue("@Field3", DBNull.value) 
     Else 
      command.Parameters.AddWithValue("@Field3", Convert.ToDateTime(txtBirthdat.Text).ToString("yyyy/MM/dd")) 
     End If 
    End With 
    Try 
     connection.Open() 
     command.ExecuteNonQuery() 
     lblMessages.Text = "Data Saved" 
    Catch ex As SqlException 
     lblMessages.Text = "Data Not Saved" 
    End Try 
End Using 

Das ist die Ausnahme, die ich bekam:

{System.Data.SqlClient.SqlError: Conversion failed when converting date and/or time from character string.}

+0

es sieht aus wie funktionieren sollte genommen werden. Können Sie uns bitte die gespeicherte Prozedur oder den Befehlstext zeigen? – N0Alias

+0

Nur für grins versuchen cmd.Parameters.Add ("@ Field3", SqlDbType.Date) .Wert = DBNull.Value – Mary

+0

Hat das Textfeld eine Maske? ... Ist es wirklich leer? Verfolgen Sie den Wert ersetzt Leerzeichen um zu überprüfen, dass es wirklich leer – Ctznkane525

Antwort

0

Wenn Sie eine gespeicherte Prozedur verwenden, versuchen Sie folgende .

die SP-Parameter ändern Standardparameterwerte

CREATE PROCEDURE 
(
@Name VARCHAR(50), 
@Email VARCHAR(255), 
@DOB DATE = NULL 
) 
AS 
BEGIN 
<Your Code> 
END 

Das bedeutet, einzustellen. @Name und @Email sind obligatorisch, aber @DOB ist NULL, wenn Sie keinen Wert dafür übergeben.

Jetzt Setzen Sie den dritten Parameter nicht binden, wenn der Benutzer einen Wert für Geburtsdatum eingegeben und es wird als NULL von SQL

+0

Ich verwende keine gespeicherte Prozedur, aber Ihr Ansatz ist eine gute Möglichkeit, das Problem zu lösen ... Ich kann die SQL-Abfrage so manipulieren, dass sie keine leeren Datumsfelder enthält und diese Felder nicht berücksichtigt die Abfrage, die Datenbankfelder enthalten den NULL-Wert ... Ich werde es versuchen 'und wenn es funktioniert, werde ich meinen Code in eine Antwort setzen ... DANKE !!!! – Masarwa

Verwandte Themen