2011-11-15 47 views
2

我從列表框中獲取用戶名,我分裂的第一個名字和姓氏,並與我用它來找到DB自己的用戶ID,如何從包含4個單詞的名稱中分割姓和名。在C#和查詢使用它在MySQL

string FirstName = li.Value.Split(' ')[0].Trim(); 
    string lastName = li.Value.Split(' ')[1].Trim(); 

但棘手的問題在這裏對我來說,當用戶名是Mark Van Harm Jiti名字是馬克範和姓氏是危害吉蒂。但是我的代碼以馬克爲名,範爲姓。但我不知道哪個是名字,哪個是姓氏。我只是從列表框中獲得文字Mark Van Harm Jiti。我應該如何改變我的查詢,以便我得到的用戶ID用戶馬克貨車危害雞啼

string getuserid = "SELECT UserID from tbl_User Where [email protected] AND [email protected]"; 

我使用MySQL數據庫,這是C#代碼。

+0

什麼用的名字三個或五個詞,或更多?關於姓氏是三個單詞的四字名稱(「Georges de la Tour」)呢? – phoog

+0

可能的重複http://stackoverflow.com/q/5596706/385844 – phoog

回答

0

我認爲你需要做一個字數來檢查名稱中的字數,然後根據數量來分支你的邏輯。我的字數功能如下。我使用它來檢查文本字段中的標籤數量,然後對數字進行拆分和插入,或者僅插入一個標籤。我覺得類似的東西就是你需要的東西。基於Van和Harm之間的數量分配。

 Public Shared Function WordCount(ByVal s As String) As Int32 
     Dim collection As MatchCollection = Regex.Matches(s, "[\S]+") 
     Return collection.Count 
    End Function 
+0

從tbl_user選擇用戶標識符Concat(Firstname,'',lastname)='Mark Van Harm Jiti';你認爲這是一個很好的解決方案 – John

4

如果您可以安全地假定姓氏是最後一個標記,則可以執行以下操作。

string[] tokens = li.Value.Split(' '); 
string firstName = tokens[0].Trim(); 
string lastName = tokens[tokens.Length - 1].Trim(); 

然而,這是一個壞的假設(參見路易斯·伊納西奧·盧拉·達席爾瓦,他的姓是「席爾瓦」或克里斯蒂亞諾羅納爾多,其姓「多斯桑托斯阿維羅」)。不要處於必須從單個字符串中辨別姓和名的位置。

但這裏對我來說很棘手的部分是,當用戶名是馬克範哈姆吉蒂的名字是馬克範和姓氏是害吉蒂。但是我的代碼以馬克爲名,範爲姓。

是啊,看到這樣的例子,基本上證實你在嘗試確定單個字符串的名字和姓氏時有錯誤的方法。沒有任何邏輯有時會挑選出最後兩個令牌,有時只挑出最後一個令牌(我的兄弟有兩個中間名,所以你不能使用總是拿走最後兩個令牌的邏輯,因爲「Mark Van Harm基蒂「這是對的,但在我的兄弟的名字,這將是錯誤的)。

+0

是的,這很有道理,謝謝 – John

+0

從tbl_user選擇用戶名,其中Concat(Firstname,'',lastname)='Mark Van Harm Jiti';你認爲這是一個很好的解決方案 – John

+0

「沒有邏輯有時會挑出最後兩個標記,有時只挑出最後一個標記」 - 但是有邏輯可以嘗試所有可能性。請看我的答案。 –

0

也許你正在對此採取不正確的做法。 ListBox如何填充?當ListBox被填充時,是否可以爲每個ListItem值存儲用戶ID?如果你這樣做了,你可以訪問ListBox的SelectedValue來獲得UserID。

0

我相信你可以調整你的查詢到這一點:

string getuserid = "SELECT UserID from tbl_User Where CONCAT(FirstName,' ', LastName)[email protected]"; 

和你的代碼更改爲:

string userName = li.Value.Trim(); 
0

我能想到的,以涵蓋所有可能的唯一方法是檢查所有排列。SQL語句應該最終落得這樣的:

(名字=「馬克·範·危害」和姓氏=「雞啼)OR(名字= ‘馬克凡’和姓氏=」危害雞啼)OR(名字= 「馬克」 AND 姓氏=「範危害雞啼)

讓我知道這是一個方法,你有興趣,我會很樂意提供一些示例代碼

相關問題