SQL - Wie mit Parameter (String) NULL übergeben?

10/02/2008 - 16:26 von Thomas Hübner | Report spam
Folgender Code:
Private Sub write_DB()

Try
Using con As New SqlConnection(cnString)
con.Open()
Dim cmd As New SqlCommand("", con)
With cmd
.CommandText = "INSERT INTO LOG (UNAME, VDN, OFFER,
no_OFFER_Reason, ADM, NR_ADM, LEAD, ACCEPTED) VALUES(@p1, @p2, @p3, @p4,
@p5, @p6, @p7, @p8)"
With .Parameters
.Add(New SqlParameter("@p1", GetType(String)))
.Add(New SqlParameter("@p2", GetType(Integer)))
.Add(New SqlParameter("@p3", GetType(Boolean)))
.Add(New SqlParameter("@p4", GetType(String)))
.Add(New SqlParameter("@p5", GetType(String)))
.Add(New SqlParameter("@p6", GetType(Byte)))
.Add(New SqlParameter("@p7", GetType(String)))
.Add(New SqlParameter("@p8", GetType(Boolean)))
End With

.Parameters(0).Value = ACTUSER
.Parameters(1).Value = ACTVDN
.Parameters(2).Value = OFFER
.Parameters(3).Value = NO_OFFER_REASON
.Parameters(4).Value = OFFER_ADM
.Parameters(5).Value = NR_ADM
.Parameters(6).Value = OFFER_LEAD
.Parameters(7).Value = CHOICE
.ExecuteNonQuery()

End With
End Using
Catch ex As Exception
Debug.WriteLine(ex.ToString)
End Try
End Sub

Parameter 4,5 und 7 (also die 3 Strings) sind teilweise vbNullString.
Dann gibts mir jedes mal eine Ausnahme, das der Parameter "erwartet"
wurde. Übergebe ich "NULL" dann steht in der Tabelle 'NULL' als String.
Ich möchte aber wirklich eine SQL NULL haben (also leer). Wie kann ich
die Parameter überlisten oder geht das gar nicht und ich muß den
jeweiligen Parameter komplett weglassen? Das würde ja dann den Code
massig um Select Case Orgien verlàngern. :-(

Liebe Grüße,
Thomas
 

Lesen sie die antworten

#1 Thomas Hübner
10/02/2008 - 18:37 | Warnen spam
Thomas Hübner schrieb:


Parameter 4,5 und 7 (also die 3 Strings) sind teilweise vbNullString.
Dann gibts mir jedes mal eine Ausnahme, das der Parameter "erwartet"
wurde. Übergebe ich "NULL" dann steht in der Tabelle 'NULL' als String.
Ich möchte aber wirklich eine SQL NULL haben (also leer). Wie kann ich
die Parameter überlisten oder geht das gar nicht und ich muß den
jeweiligen Parameter komplett weglassen? Das würde ja dann den Code
massig um Select Case Orgien verlàngern. :-(



Habs selber gelöst mit:
.Parameters(0).Value = ACTUSER
.Parameters(1).Value = ACTVDN
.Parameters(2).Value = OFFER
If NO_OFFER_REASON = Nothing Then
.Parameters(3).Value = DBNull.Value
Else
.Parameters(3).Value = NO_OFFER_REASON
End If
If OFFER_ADM = Nothing Then
.Parameters(4).Value = DBNull.Value
Else
.Parameters(4).Value = OFFER_ADM
End If
.Parameters(5).Value = NR_ADM
If OFFER_LEAD = Nothing Then
.Parameters(6).Value = DBNull.Value
Else
.Parameters(6).Value = OFFER_LEAD
End If
.Parameters(7).Value = CHOICE
.ExecuteNonQuery()

Es stellt sich mir aber gleich die Frage was wertvoller ist - NULL oder
"". Ich habe als Testdatenbank eine mdb mit 40k Produktionsdatensàtzen
auf dem SQL Server importiert. Beim Import wurden Leerfelder auf ""
gesetzt. Richtig (und Platzsparender?) wàre doch aber sicher NULL?

Gruß,
Thomas

Ähnliche fragen