2009-11-26 28 views
0

我在文本框中輸入名稱例如。 「約翰」並將其保存在它所做的數據庫中,然後再次輸入它未保存的「約翰」。但是,如果我輸入「約翰」,它再次保存......我需要它不保存約翰,反之亦然。文本框或代碼不區分大小寫

OK,所以這是文本框是安靜正常:

<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(); 
      } 
+0

你用什麼API訪問數據庫? – 2009-11-26 00:09:31

+0

向我們顯示您的查詢並插入代碼,以便我們可以建議mods。 – Joel 2009-11-26 00:11:29

+0

'InsertName()'中的代碼是什麼? – 2009-11-26 00:21:49

回答

1
if (Name != (string)names[i]) 
{ 
    ... 
} 

可能成爲一個冷水澡

if (!Name.Equals((string)names[i], StringComparison.InvariantCultureIgnoreCase)) 
{ 
    ... 
} 
1

一種方式來做到這一點是它每次前切換到適當的情況下,將其呈現給數據庫。

爲了讓它適當的情況下,你可以嘗試在System.Globalization.TextInfoToTitleCase()方法。

請注意ToTitleCase()提供了一個任意的套管行爲,而不是語言上正確的行爲。例如「戰爭與和平」應該有一個英文小寫字母a。對於O'Brien這樣的情況來說,這尤其成問題,其中ToTitleCase將輸出爲O'brien。

最後,讓數據庫保存東西可能更容易。

1

時間。

首先,如果您想檢查名稱是否存在,並在沒有的情況下插入它,則必須在適當的隔離和事務控制下檢查服務器。除此之外,通過檢查名稱與客戶端上的數組之間的差異,這種方法效率低下,因爲它檢查名稱是否存在存在(過去時),因此不正確。它不考慮併發性,因此兩個請求可能會嘗試插入相同的名稱。其次,如果您需要數據庫中的唯一性,那麼您可以通過表約束來強制執行它。您需要一個不區分大小寫的獨特名稱,那麼您應該在Name列上的表中添加一個UNIQUE constraint,並確保該列使用不區分大小寫的collation

0

爲什麼不強制爲大寫(或小寫爲此事)的比較邏輯:

如果(!Name.ToUpper()=(字符串)名稱[I] .ToUpper)

HTH