大文字と小文字を区別しないテキストボックスまたはコード
-
05-07-2019 - |
質問
テキストボックスに名前を入力します。 "ジョン"それを行うデータベースに保存し、「John」と再度入力します。保存しません。しかし、「john」と入力すると、これが再び保存されます...ジョンを保存しないようにする必要があります。逆も同様です。
わかりましたので、これは静かな通常のテキストボックスです:
<asp:TextBox ID="TextBox2" runat="server" Width="80%" BorderColor="Black"
MaxLength="127"></asp:TextBox>
ここにコードがあります:
int k= 0
SqlConnection dataConnection = new SqlConnection();
dataConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlCommand dataCommand =
new SqlCommand("select Name from Groups", dataConnection);
ArrayList names = new ArrayList();
dataConnection.Open();
SqlDataReader rdr = dataCommand.ExecuteReader();
while (rdr.Read())
{
names.Add(rdr.GetString(0));
}
dataCommand.Dispose();
dataConnection.Dispose();
//to check if name already used..
for (int i = 0; i < names.count; i++)
{
if (Name != (string)names[i])
{
k = 1;
}
else
{
Label1.Text = "Name is already present";
Label1.Visible = true;
k = 0;
break;
}
}
if (k == 1)
{
Insertname();
}
解決
if (Name != (string)names[i])
{
...
}
なる可能性があります
if (!Name.Equals((string)names[i], StringComparison.InvariantCultureIgnoreCase))
{
...
}
他のヒント
それを行う1つの方法は、データベースに表示する前に毎回適切なケースに変更することです。
適切なケースにするには、 System.Globalization.TextInfo
の ToTitleCase()
メソッドを試してください。
ToTitleCase()
は、言語的に正しい動作ではなく、任意の大文字小文字の振る舞いを提供することに注意してください。たとえば、「戦争と平和」英語では小文字のaが必要です。これは、O'Brienなどの場合に特に問題となり、 ToTitleCase
はO'brienとして出力します。
最終的には、データベースに物を保存させる方が簡単かもしれません。
コールドシャワーの時間。
まず、名前が存在するかどうかを確認し、存在しない場合は名前を挿入する場合は、適切な分離とトランザクション制御の下でサーバーで確認する必要があります。名前と client の配列をチェックすることで恐ろしく非効率であることに加えて、名前が existed (過去形)でなかったかどうかをチェックするため、そこにあるものは間違っています。同時実行性は考慮されないため、2つのリクエストで同じ名前を挿入しようとする可能性があります。
第二に、データベースの一意性が必要な場合は、テーブルの制約によって一意性を強制します。大文字と小文字を区別しない一意の名前が必要な場合は、 UNIQUE制約 [名前]列のテーブルに移動し、列で大文字と小文字が区別されないことを確認します照合。
比較ロジックで大文字(またはその場合は小文字)を強制するだけではない理由:
if(Name.ToUpper()!=(string)names [i] .ToUpper)
HTH