Я написал эту процедуру на сайте. он берет строку в качестве входного параметра (имя пользователя) и просматривает связанную таблицу, чтобы узнать ее запись и вернуть поле «ID» в качестве вывода процедуры. эта работа прекрасна, но есть одна (основная) проблема, когда она берет ввод на другом английском языке, она не может найти целевую запись и возвращает «-1» в качестве вывода. Посетители используют персидский язык, и я наблюдал его на своем SQL-сервере. Сортировка - «Persian_100_CI_AI», а мои строковые поля - «nvarchar». Что мне делать, чтобы решить эту проблему? я использую SQL-Server 2008.как решить эту проблему SQL и иностранного языка?
большое спасибо
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;
}
эй также просто интересно в вашем коде, если вы только ожидаете, что ID будет возвращен .. тогда почему вы выбираете * из своей таблицы ..? вид дорогостоящего .. – MethodMan
используйте параметры, чтобы избежать SQL-инъекции. – dotjoe
Вам необходимо использовать UNICODE, как показано здесь: http://msdn.microsoft.com/en-us/library/ms180059.aspx –