2016-08-04 11 views
3

Ich bin mit einer Aufgabe zugewiesen, ein vorhandenes ASP.NET C# -System zu debuggen. Ich fand heraus, dass dies durch eine gespeicherte Prozedur verursacht wird, und die Fehlermeldung istDebug und Fehler finden "Fehler beim Konvertieren des Datentyps Varchar in Real"

Msg 8114, Ebene 16, Status 5
Fehlerdatentyp varchar auf reale Umwandlung.

Keine Zeilennummern oder eine Beschreibung von Fehlern. Jede Art von Heads Up wird geschätzt. Wo soll ich nachschauen, wie man debuggt, um den genauen Fehler zu finden. Bitte helfen Sie.

+0

wie Problem Sieht aus Prozedur mit sQL. Schauen Sie sich die Abfrage an und suchen Sie nach den Spalten, die 'varchar' sind und eine Operation mit' number' durchführen. Es kann sein, wo Bedingung auch oder mit Zeichenfolge und Nummer verbinden Sie suchen müssen. –

Antwort

2

Ich habe den Fehler gefunden und teile meine Antwort in der Hoffnung, dass jemand mit dem gleichen Problem konfrontiert wird.Dies ist, wo der Fehler

CASE [Category].[ID] 
    WHEN '1' THEN [Category].[Name] 
    WHEN '2' THEN [Category].[Weight] 
END 

Hier [Category].[Name] war, ist String und [Category].[Weight] real ist, verschiedene Datentypen innerhalb derselben CASE Klausel versucht, so dass dies alles zu lösen, was ich tun musste, ist diese Bedingung aufgespalten, wie diese

CASE [Category].[ID] 
    WHEN '1' THEN [Category].[Name] 
    END, 
CASE [Category].[ID] 
    WHEN '2' THEN [Category].[Weight] 
END 

hoffe, das hilft

3

Dies ist zu lang für einen Kommentar.

Das Problem ist offensichtlich - Sie haben eine Zeichenfolge, und Sie behandeln es als eine Zahl. Es gibt drei mögliche Gründe.

Die erste ist eine explizite Konvertierung, bei der die Zeichenfolge in eine Zahl konvertiert wird. Dies sollte leicht zu finden sein. Sie können die explizite Konvertierung mit try_convert() in SQL Server 2012+ ersetzen.

Die zweite ist nicht viel schwieriger. Der Operator + wird sowohl für die Addition als auch für die Kettenverkettung verwendet. Es verursacht oft diese Art von Problem. Alle numerischen Argumente müssen in Zeichenfolgen konvertiert werden. Oder ändern Sie den gesamten Code, der die Verkettung ausführt, um die CONCAT()-Funktion zu verwenden - die Argumente werden automatisch in Zeichenfolgen konvertiert.

Die dritte ist implizite Konvertierung für numerische Operationen. Wenn Sie andere Operationen (oder Funktionsaufrufe) haben, die numerische Werte erfordern, konvertiert SQL Server die Werte implizit in Zahlen. Dies kann sehr schwer zu finden sein. Versuchen Sie, Code zu schreiben, der nicht auf impliziten Konvertierungen angewiesen ist.

Hinweis: Der Versuch, ungültige Werte mit einer WHERE-Klausel (auch in einer Unterabfrage oder CTE) herauszufiltern, funktioniert nicht. Wenn Sie

0

haben, können Sie Ihren SQL-Code einfach debuggen wie in Visual Studio, wenn Sie Microsoft SQL Management Studio haben.

enter image description here

Sie Debuggen starten können, Debug -> Start Debugging oder das Symbol in der Abbildung dargestellt oder sogar eine Tastenkombination Alt + F5.

Ich würde empfehlen, die execute-Anweisung in einem anderen Abfragefenster zu schreiben, mit Parametern bei Bedarf, vergessen Sie nicht, Ihren DB-Aufruf hinzuzufügen und dieses Fenster zu debuggen.

use yourdb 
exec yoursp para1 para2 

Sie können in (F11) und Schritt über (F10) treten. Der Ort, an dem das Debugging stoppt oder abstürzt, ist der Ort, an dem Sie suchen müssen. Sie können sogar Bremspunkte setzen, sobald Sie das Debuggen mit der Tastenkombination F9 starten. For more look at this video.