如何解决这个SQL和外语问题

本文关键字:SQL 外语 问题 何解决 解决 | 更新日期: 2023-09-27 18:19:54

我在一个站点中编写了这个过程。它将一个字符串作为输入参数(用户名),并查看相关的表以找出它的记录,并返回"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;
}

如何解决这个SQL和外语问题

我不想回答自己的问题,但现在是:

必须在select命令中添加一个N,就像这样:

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

问题解决了!

如果没有N,字符串将被视为varchar,并且转换会丢失数据库的varchar编码所支持的字符之外的字符。