私はこの手順をサイトに書きました。文字列を入力パラメータ(ユーザー名)として取得し、関連するテーブルを参照してレコードを探し、プロシージャの出力として「ID」フィールドを返します。 これはうまくいきますが、他の英語の入力を受けた場合、ターゲットレコードを見つけられず、 "-1"を出力として返すという(大きな)問題があります。 訪問者はペルシア語を使用しており、私はSQL Serverでそれを観察しました。照合は "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 –