Speichern von UTF-8-Bytes aus einer C # -String in einer SQL Server 2000-TEXT-Spalte

Ich habe eine vorhandene SQL Server 2000-Datenbank, in der UTF-8-Darstellungen von Text in einer TEXT-Spalte gespeichert sind. Ich kann den Spaltentyp nicht ändern und muss in der Lage sein, Nicht-ASCII-Unicode-Daten aus einem C # -Programm in dieser Spalte zu speichern.

Hier ist der Code:

sqlcmd.CommandText =
    "INSERT INTO Notes " +
    "(UserID, LocationID, Note) " +
    "VALUES (" +
        Note.UserId.ToString() + ", " +
        Note.LocationID.ToString() + ", " +
        "@note); " +
    "SELECT CAST(SCOPE_IDENTITY() AS BIGINT) ";

SqlParameter noteparam = new SqlParameter( "@note", System.Data.SqlDbType.Text, int.MaxValue );

Zu diesem Zeitpunkt habe ich verschiedene Möglichkeiten ausprobiert, um meine UTF-8-Daten in den Parameter zu übernehmen. Zum Beispiel:

// METHOD ONE
byte[] bytes = (byte[]) Encoding.UTF8.GetBytes( Note.Note );
char[] characters = bytes.Select( b => (char) b ).ToArray();
noteparam.Value = new String( characters );

Ich habe es auch einfach versucht

// METHOD TWO
noteparam.Value = Note.Note;

Und

// METHOD THREE
byte[] bytes = (byte[]) Encoding.UTF8.GetBytes( Note.Note );
noteparam.Value = bytes;

Weiter, hier ist der Rest des Codes:

sqlcmd.Parameters.Add( noteparam );
sqlcmd.Prepare();

try
    {
    Note.RecordId = (Int64) sqlcmd.ExecuteScalar();
    }
catch
    {
    return false;
    }

Methode eins (UTF8-Bytes in eine Zeichenfolge schreiben) macht etwas Seltsames - ich denke, es ist UTF-8, das die Zeichenfolge ein zweites Mal codiert.

Methode zwei speichert Müll.

Methode drei löst in ExecuteScalar () eine Ausnahme aus, die besagt, dass der Parameter nicht in einen String konvertiert werden kann.

Dinge, die ich bereits kenne, also muss ich nicht sagen:

SQL Server 2000 ist vergangen / nähert sich dem LebensendeTEXT-Spalten sind nicht für Unicode-Text gedachtIm Ernst, SQL Server 2000 ist alt. Sie müssen aktualisieren.

Irgendwelche Vorschläge?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage