2010-09-15 9 views
1

J'écris à nouveau sur mon problème de codage ... Maintenant, avec quelques exemples de code. En bref: lors de l'enregistrement dans les données d'entrée de la base de données, certains caractères spécifiques à la langue, tels que le polonais «ñ», ne seront pas sauvegardés - l'enregistrement «n» est sauvegardé. D'autre part, la chaîne: Adams æbler, avec æ est en train de sauver.Sql server 2005 avec le problème d'encodage ASP .NET

est code de begind ici qui fait enregistrer des trucs et affiche les données:

Default.aspx a meta tag:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Table ressemble à ceci:

CREATE TABLE [dbo].[Users]([Surname] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL) ON [PRIMARY] 

Je ne sais pas quoi d'autre est nécessaire pour résoudre le problème. Aide appréciée.

Merci, Paweł

+0

Ah, quand j'ÉMISSION: SELECT Nom, CAST (Nom AS VARBINARY (30)) AS Expr1 des utilisateurs , les octets du caractère 'ñ' alloué sont 0x6E00 - donc dans la base de données, le caractère 'n' est stocké. – dragonfly

+0

Est-ce que 'Surnme.Text' contient la valeur correcte si vous déboguez dans' Button1_Click'? Quelle valeur semble être envoyée à SQL Server si vous utilisez SQL Profiler? –

+0

Oui. Le nom de famille.Texte a la valeur correcte. En le vérifiant également avec Encoding.Unicode.GetBytes retourne "bon" octets. Je ne l'ai pas encore vérifié avec profiler. – dragonfly

Répondre

0

Enfin j'ai compris ce qui ne va pas. J'ai raté le préfixe N avant chaîne (il marque chaîne comme UNICODE):

command.CommandText = "INSERT INTO users VALUES(N'" + Surname.Text + "')"; 

Merci, Paweł

1

Votre définition de la table semble être le problème. Le nom de famille est défini par COLLATE Latin1_General_CI_AI. La partie AI indique Accent Insensitive. Vous devez modifier le classement en Latin1_General_CI_AS, pour conserver les données.