Fragensteller
SqlDbType.UniqueIdentifier

Frage
-
Hi zusammen ich versuche mich an einer SQL Abfrage mittels Parameters. Ich habe in meiner Abfrage ein UniqueIdentifier. Wie frage ich diese denn nun ab.Aber schon mehrfach Lösung im Internet gefunden. Aber ohne Erfolg.
Ich probiere es aktuell mit
Dim g As Guid = Guid.Parse(Me.p_m_Guid)
cmd.Parameters.Add("@Guid", SqlDbType.UniqueIdentifier).Value = System.Data.SqlTypes.SqlGuid.Parse(g.ToString())
Bekomme aber immer folgenden Fehler
Fehler beim Konvertieren einer Zeichenfolge in 'uniqueidentifier'.
Könnt ihr mir weiterhelfen (VB.Net, SQL Server Express 2008)
Alle Antworten
-
Hallo Thomas,
lasse einfache den zweiten Teil mit Parse/ToString weg:
cmd.Parameters.Add("@Guid", SqlDbType.UniqueIdentifier).Value = g
Der SqlClient kann eine Guid direkt als uniqueidentifier verarbeiten und implizit in eine SqlGuid konvertieren.Mehr siehe Konfigurieren von Parametern und Parameterdatentypen (ADO.NET)
Gruß Elmar
P. S.: Bitte lösche das identische doppelte Posting. Danke.
-
-
Hallo Thomas,
wie sieht die zugrunde liegende Abfrage aus?
Der Wurm dürfte eher dort versteckt sein.Uniqueidentifier mögen nicht in allen Versionen die "{}", offiziell gibt es nur die ohne!
Gruß Elmar
-
Hi Elmar, die Abfrage sieht so aus...
cmd.CommandType = CommandType.Text
sSQL_Command = "Select * from TestDB"
sSQL_Command = sSQL_Command + " where (m_Guid = '@Guid')"
cmd.CommandText = sSQL_Command
Dim g As Guid = Guid.Parse(Me.p_m_Guid)
cmd.Parameters.Add("@Guid", SqlDbType.UniqueIdentifier).Value = g ' System.Data.SqlTypes.SqlGuid.Parse(g.ToString())
cmd.Connection = cn
dr = cmd.ExecuteReader()
dt.Load(dr)>>hier kommt denn der fehler
dr.Close()
dr = Nothing -
Hi Elmar, ich noch mal, ich habe jetzt gerade mal die Hochkomma weggelassen, denn kommt zwar kein Fehler.
(m_Guid = @Guid)Ich bekomme aber kein Ergebnis. Er findet den Datensatz nicht.
Führe ich im Managementstudio folgendes direkt aus
where (m_Guid = '{64c9de40-f207-4e7f-b80b-26699095f93d}')
bekomme ich ein Ergebnis.
- Bearbeitet Thomas Klinger2 Sonntag, 29. Juli 2012 18:42
-
Hallo,
die Düttelchen wegzunehmen, war schon ein Schritt in die richtige Richtung,
die haben bei Parametern generell nichts verloren.Wo kommt kommt p_m_Guid her und welcher Datentyp ist es?
(Auch der Name TestDb kommt mir für eine Tabelle etwas seltsam vor, aber wenn es so sein muß ;-)Anstatt die damit eine Datatable zu befüllen, was passiert, wenn Du das Ergebnis durchläufst? z. B.
Using dr = cmd.ExecuteReader() While dr.Read() ' Ggf. weitere Spalten hinzunehmen... Console.WriteLine("{0}", dr(0)) End While End Using
Gruß Elmar