SQL Server 2005 с проблемой кодировки ASP .NET - PullRequest
1 голос
/ 16 сентября 2010

Я снова пишу о своей проблеме кодирования ... Теперь с некоторыми примерами кода.

В двух словах: при сохранении во входные данные базы данных некоторые специфичные для языка символы, такие как польский 'ñ', не сохраняются - insted ins 'сохраняется С другой стороны, строка: Адамс æблер, с æ сохраняет.

Вот код, позволяющий сохранять данные и отображать данные:

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "";
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["encoding"].ConnectionString))
        {
            conn.Open();
            var command = conn.CreateCommand();
            command.CommandText = "SELECT * FROM users";
            var reader = command.ExecuteReader();
            while (reader.Read())
            {
                Label1.Text += reader.GetString(0);
            }                
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["encoding"].ConnectionString))
        {
            conn.Open();
            var command = conn.CreateCommand();
            command.CommandText = "INSERT INTO users VALUES('" + Surname.Text + "')";
            command.ExecuteNonQuery();
        }  
    }

Default.aspx имеет метатег:

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

Таблица выглядит так:

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

Я не знаю, что еще нужно для решения проблемы. Помощь оценена.

Спасибо, Павел

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Кажется, проблема в определении таблицы. Фамилия определяется с помощью COLLATE Latin1_General_CI_AI. Часть AI указывает на нечувствительность к акценту. Вам нужно изменить параметры сортировки на Latin1_General_CI_AS для сохранения данных.

0 голосов
/ 17 сентября 2010

наконец я понял, что не так.Я пропустил префикс N перед строкой (помечает строку как UNICODE):

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

Спасибо, Павел

...