How to get Guid aus SqlDataReader uniqueidentifier
SQL Server 2008 (version 10.50.2550).
Ich habe eine select-Abfrage eine einzelne Spalte vom Typ uniqueidentifier.
Ich will diesen in eine C# variable vom Typ Guid.
Alle der folgenden Methoden führen zu Ausnahmen.
reader ist vom Typ SqlDataReader.
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
Guid guid = reader.GetGuid(reader.GetOrdinal("integ_schemehistoryId")); //1
Guid guid = Guid.Parse((string)reader["integ_schemehistoryId"]); //2
Guid guid = (Guid)reader["integ_schemehistoryId"]; //3
Guid guid = new Guid((string)reader["integ_schemehistoryId"]); //4
Guid guid = Guid.Parse(reader["integ_schemehistoryId"].ToString()); //5
}
}
Fehler zum 1:
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting from a character string to uniqueidentifier.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.HasMoreRows()
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at System.Data.SqlClient.SqlDataReader.Read()
at Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
Fehler zum 2:
System.InvalidCastException: Unable to cast object of type 'System.Guid' to type 'System.String'.
at Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
Fehler zum 3:
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting from a character string to uniqueidentifier.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.HasMoreRows()
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at System.Data.SqlClient.SqlDataReader.Read()
at Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
Fehler zum 4:
System.InvalidCastException: Unable to cast object of type 'System.Guid' to type 'System.String'.
at Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
Fehler zum 5:
System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting from a character string to uniqueidentifier.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.HasMoreRows()
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at System.Data.SqlClient.SqlDataReader.Read()
at Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
Welche Fehler haben Sie?
Nichts mit
Sie sagten, Sie seien compile-Zeit Fehler. Das sind Ausnahmen, die auftreten können, wie execution time. Bitte vorsichtiger als präzise Informationen... haben Sie verschwendet die Zeit aller beteiligten-verfolgen mythischen compile-Zeit-Fehler.
Ich bin jetzt sehr verwirrt, wie beide Fehler 2 und 3 können auftreten. Meine Vermutung ist, dass Sie auftreten, auf verschiedene Zeilen... ich bin nicht überrascht casting zuzu sagen, dass es eine GUID, es ist unklar, warum der cast zu
GetGuid
funktionieren sollte. Ich würde raten, gegen jeder Ansatz führt, die zwei string-Konvertierungen unnötig. Bitte geben Sie die details der Fehlermeldung, die Sie bekommen beim Aufruf GetGuid
.Nichts mit
Guid.Parse
. Ich würde erwarten, dass Ihr letzter Versuch sein, auch okay. Jeder mal, wenn Sie sagen "ich bekomme Fehler" oder "it doesn ' T compile", in der ein Stack Overflow Frage sollten Sie angeben, was diese Fehler sind. Wie es ist, es sieht aus wie die ersten und die letzten Versionen sollten in Ordnung sein.Sie sagten, Sie seien compile-Zeit Fehler. Das sind Ausnahmen, die auftreten können, wie execution time. Bitte vorsichtiger als präzise Informationen... haben Sie verschwendet die Zeit aller beteiligten-verfolgen mythischen compile-Zeit-Fehler.
Ich bin jetzt sehr verwirrt, wie beide Fehler 2 und 3 können auftreten. Meine Vermutung ist, dass Sie auftreten, auf verschiedene Zeilen... ich bin nicht überrascht casting zu
string
ausfällt, aber angesichts der Tatsache, dass der cast fehlschlägt, Guid
scheitern würden.InformationsquelleAutor cja | 2013-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist etwas falsch, entweder mit Ihren Daten oder Ihrem SQL. Die ersten und Dritten Methode sollte funktionieren - ich persönlich würde verwenden die erste form, wie es die klarsten aus meiner Sicht.
Aber sehen Sie den stack-trace:
...
System.Daten.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
System.Daten.SqlClient.SqlDataReader.Read()
bei Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
Beachten Sie, dass es die
Read()
Anruf fehlschlägt, nichtGetGuid
oder der indexer.Meine Vermutung ist, dass Ihre Immobilie wird geholt, mehrere Male, und manchmal es funktioniert - das ist, warum Sie immer waren eine cast exception in Ihre zweite Ansatz - aber für einige Zeilen, schlägt es fehl, aufgrund von einigen problem mit den Daten oder der SQL. Wir haben keine Ahnung, wo Ihre Daten kommen, können wir nicht helfen, Sie über die Diagnose, aber das ist, wo Sie suchen sollten, weiter.
Left-join-fetching Schlüssel duplizieren? Das werde es tun.
InformationsquelleAutor Jon Skeet
Haben Sie versucht:
Ich glaube nicht, dass Sie haben.
new Guid(...
verwendet der Konstruktor Ihre Frage besagt, dass Sie versucht haben, die statische MethodeGuid.Parse
, dieSQLDataReader
Methode.GetGuid
und direkt casting zu(Guid)
aus dem Objekt inReader
keiner der 3 Fällenew
, das ist der Konstruktor.Sorry, du hast Recht. Ich bekomme die Meldung: System.InvalidCastException: Unable to cast object of type 'System.Guid' type 'System.String'. bei Simego.DataSync.DynamicColumns.DataSourceRowOverride.get_EpochSchemeHistoryID()
InformationsquelleAutor welegan
Versuchen mithilfe
Guid.Parse
MethodeNun sind Sie vorbei, die in den falschen Datentyp ist es möglich, dass dies funktionieren würde, wenn der richtig, obwohl es nicht der beste Weg, es zu tun.
konvertieren Sie Leser-Wert zu einem string, da der Parse-Methode erwarten string param
Ich downvoted, wenn die Antwort war nur "Versuchen Sie mithilfe der Guid.Parse-Methode"
Ich auch u einen link wie zu verwenden Guid.Parse-Methode richtig
InformationsquelleAutor Nikola Mitev
Dieser Fehler wird generiert aus dem SQL. In anderen Worten gibt es etwas falsch mit Ihnen, SQL-Befehl text. Nicht Ihrem c# - code.
Nein ist es nicht - zumindest nicht die ganze Zeit. Blick auf die stack-trace...
InformationsquelleAutor Moose
Als die anderen Antworten vorschlagen, die Sie versuchen sollten:
Möglicherweise möchten Sie auch prüfen Sie Ihre gespeicherten Prozeduren und Ihre Tabelle, kann es etwas falsch.
InformationsquelleAutor goelze
InformationsquelleAutor Sean Cleaver