Как решить эту проблему SQL и иностранного языка? - PullRequest
0 голосов
/ 09 января 2012

Я написал эту процедуру на сайте. он принимает строку в качестве входного параметра (имя пользователя) и просматривает связанную таблицу, чтобы выяснить ее запись и вернуть поле «ID» в качестве вывода процедуры. это работает нормально, но есть одна (основная) проблема, которая заключается в том, что, когда он принимает ввод на другом английском языке, он не может найти целевую запись и возвращает «-1» в качестве вывода. Посетители используют персидский язык, и я наблюдал это на своем сервере SQL. Параметры сортировки - «Persian_100_CI_AI», а мои строковые поля - «nvarchar». что я должен сделать, чтобы решить эту проблему? Я использую SQL-Server 2008.

Большое спасибо

protected int GetThisUserID(string uname)
{
    string returnvalue = "";
    int returnintegervalue = -1;
    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["OldEagleConnectionString"].ToString());
    try
    {
        //SqlCommand command = new SqlCommand("SELECT [ID] FROM [Customers] WHERE ([Uname] = '" + User.Identity.Name.ToString() + "'", connection);
        //SqlCommand command = new SqlCommand("SELECT * FROM [Customers] WHERE ([Uname] = '" + User.Identity.Name.ToString() + "')", connection);
        SqlCommand command = new SqlCommand("SELECT * FROM [Customers] WHERE ([Uname] = '" + uname + "')", connection);

        connection.Open();
        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                returnvalue = reader["ID"].ToString();

                returnintegervalue = Int32.Parse(returnvalue);
            }
        }
    }
    catch (SqlException ex)
    {
        Response.Write(ex.Message.ToString());
        returnvalue = ex.Message.ToString();
    }
    finally
    {
        connection.Close();
        SqlConnection.ClearPool(connection);
    }
    return returnintegervalue;
}

1 Ответ

0 голосов
/ 10 января 2012

Я не хочу отвечать на свой собственный вопрос, но вот он:

необходимо добавить N в команду выбора, вот так:

SqlCommand command = new SqlCommand("SELECT * FROM [Customers] WHERE ([Uname] = N'" + uname + "')", connection);

проблема решена!

Без N строка считается равной varchar, и преобразование теряет символы, отличные от поддерживаемых кодировкой varchar базы данных.

...