텍스트 상자 또는 코드는 대소 문자로 민감하지 않습니다
-
05-07-2019 - |
문제
TextBox 예를 들어 이름을 입력합니다. "John"과 데이터베이스에 저장 한 다음 다시 저장하지 않는 "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))
{
...
}
다른 팁
이를 수행하는 한 가지 방법은 데이터베이스에 제시하기 전에 매번 적절한 케이스로 변경하는 것입니다.
적절한 케이스를 얻으려면 ToTitleCase()
방법 System.Globalization.TextInfo
.
주목하십시오 ToTitleCase()
언어 적으로 올바른 행동이 아니라 임의의 케이스 행동을 제공합니다. 예를 들어 "전쟁과 평화"는 영어로 된 소문자 A가 있어야합니다. 이것은 오브라이언과 같은 경우에 특히 문제가됩니다. ToTitleCase
오브라이언으로 출력 할 것입니다.
결국, 데이터베이스가 물건을 저장하도록하는 것이 더 쉬울 수 있습니다.
차가운 샤워 시간.
먼저, 이름이 존재하는지 확인하고 적절한 격리 및 트랜잭션 제어하에 서버를 확인 해야하는 경우 삽입하려면 서버를 확인해야합니다. 이름을 확인하여 끔찍하게 비효율적 인 것 외에도 고객, 이름이 없는지 확인하기 때문에 틀 렸습니다. 존재했다 (과거형). 동시성을 고려하지 않으며 결과적으로 두 요청이 동일한 이름을 삽입하려고 시도 할 수 있습니다.
둘째, 데이터베이스에서 독창성이 필요한 경우 테이블 제약으로 시행됩니다. 당신은 케이스의 무감각 한 독특한 이름을 원합니다. 그러면 추가해야합니다. 독특한 제약 이름 열의 테이블에 열에 열이 둔감 한 케이스를 사용하는지 확인하십시오. 대조.
비교 논리에서 대문자 (또는 그 문제에 대한 소문자)를 강제로 강제로 강제하지 않는 이유는 무엇입니까?
if (name.toupper ()! = (문자열) 이름 [i] .toupper)
HTH