2016-07-31 8 views
1

Ich habe eine einfache App erstellt, mit der ich meine in C# geschriebenen Websites und Anwendungen übersetzen kann. Allerdings weiß ich nicht, wie man spezielle Zeichen in SQL Server einfügt, ich habe MySql vorher mit PHP benutzt. Jetzt sehe ich nur ??????? Zeichen, wenn ich Sonderzeichen in meiner Datenbank mit diesem Befehl in C# einfügen:Wie kyrillische und andere spezielle Zeichen in SQL Server mit SqlCommand C# einfügen?

using (SqlCommand sqlCmd = new SqlCommand()) 
{ 
    sqlCmd.Connection = connection; 
    sqlCmd.CommandType = CommandType.Text; 

    sqlCmd.CommandText = "INSERT INTO dbo.Translations(TranslationKey,TranslationValue,FromLanguageKey,ToLanguageKey) VALUES (@TranslationKey, @TranslationValue, @FromLanguageKey, @ToLanguageKey)"; 

    sqlCmd.Parameters.AddWithValue("@TranslationKey", item.TranslationKey); 
    sqlCmd.Parameters.AddWithValue("@TranslationValue", item.TranslationValue); 
    sqlCmd.Parameters.AddWithValue("@FromLanguageKey", item.FromLanguageKey); 
    sqlCmd.Parameters.AddWithValue("@ToLanguageKey", item.ToLanguageKey); 

    try 
    { 
     connection.Open(); 
     sqlCmd.ExecuteNonQuery(); 
     connection.Close(); 
    } 
    catch (Exception ex) 
    { 
     connection.Close(); 
    } 
} 

Einige Tutorial schrieb Verwendung N Aussage, aber wie kann ich es mit Parameters.AddWithValue?

+0

Sie sollten auschecken [Können wir AddWithValue() bereits beenden?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-ready /) und mit '.AddWithValue()' aufhören - es kann zu unerwarteten und überraschenden Ergebnissen führen ... –

Antwort

3

Zuerst das Wichtigste. Dies ist:

catch (Exception ex) 
{ 
    connection.Close(); 
} 

ist sehr, sehr böse. Sie werfen alle Informationen, die Sie über mögliche Fehler haben, weg. Wenn Sie Fehler finden, melden Sie sie und/oder zeigen Sie sie an. Wirf sie nicht weg. Code wie dieser macht das Debuggen zum Albtraum. Was Sie wollten wahrscheinlich schreiben war:

try 
{ 
    connection.Open(); 
    sqlCmd.ExecuteNonQuery(); 
} 
finally 
{ 
    connection.Close(); 
} 

Noch besser: Verwenden Sie das using Schlüsselwort.


Jetzt über das kleinere Problem, die Lokalisierung. Ihr Code ist korrekt (außer für den oben genannten Punkt), Ihre Datentypen sind es wahrscheinlich nicht.

Da Sie haben eine nicht bieten [MCVE], kann man nur vermuten, aber die wahrscheinlichste Ursache ist, dass Sie varchar oder text Spalten verwendet, wenn Sie nvarchar oder nvarchar(MAX) verwendet haben sollte.

+0

Ich habe Textspalten verwendet. : S – tixovoxi

+0

@tixovoxi: Verwenden Sie stattdessen 'nvarchar (MAX)'. Grund: (1) 'text' unterstützt nur eine einzige Codepage,' ntext' unterstützt Unicode (was Sie wollen). (2) 'text' und' ntext' sind veraltet, verwenden Sie stattdessen 'varchar (MAX)' und 'nvarchar (MAX)'. – Heinzi

+0

Vielen Dank für Ihren Rat und für nvarchar Tipp :) Es löste das Problem für mich. – tixovoxi