2012-04-11 79 views
0

我有一個WCF服務。需要將列拆分爲兩個

我有一個字段(稱爲名稱),現在客戶端想要將此更改爲FirstName(前一半空格前)和LastName(空格後的所有內容)。

此WCF服務正在被不同的應用程序使用,我希望在不破壞任何現有客戶端的情況下完成此操作。

即使它們不存在於數據庫中,我可以添加兩個新的數據庫嗎?這兩個新數據成員的價值將如何確定或獲得?

感謝

+3

請記住,這是正確做一個相當困難的事情。如果某人的姓氏中有空格,比如「Mark Van Duser」或者用大寫字母「E」。 F. Codd'? – JNK 2012-04-11 15:06:09

+0

是的,或者如果你有一個人只有一個名字,就像很多來自非洲的足球運動員一樣......你可能想要先檢查一下是否有空間,然後再考慮是否需要它在名字或SecondName中 – 2012-04-11 15:15:31

回答

1

如果新的數據成員是字符串那麼這應該是罰款,附加數據成員將舊版本的服務客戶端忽略。

請參閱此相關的問題: Adding field to WCF data contract breaks clients?

+0

添加列應該沒問題,但是如何檢索數據。我有以下數據庫[DataMember] public string Name {get;組; }。我將如何添加這兩個新的數據記錄? – Tippu 2012-04-11 15:14:39

+0

將它們添加爲[DataMember] public string FirstName {get;組; },[DataMember] public string Surname {get;組; }(或類似),然後更新您的數據訪問層以相應地填充。 – DaveRead 2012-04-11 15:17:27

5

像這樣的東西應該工作:

DECLARE @FullName VARCHAR(255) 
SET @FullName = 'James Johnson' 

SELECT SUBSTRING(@FullName, 1, CHARINDEX(' ', @FullName) - 1) AS FirstName, 
     SUBSTRING(@FullName, CHARINDEX(' ', @FullName) + 1, LEN(@FullName)) AS LastName 

從上面看起來輸出是這樣的:

 
FirstName LastName 
------------ ---------------- 
John   Doe 

在代碼中解析名稱,下面的代碼示例應名字和姓氏工作正常。如果你需要一個健壯的解析器來處理前綴,後綴和中間名,可以看看this article

var names = ("James Johnson").Split(Convert.ToChar(" ")); 
if (names.Length > 0) 
    Response.Write(string.Format("First: {0}, Last: {1}", names[0], names[1])); 
+0

我想在中間層執行此操作 – Tippu 2012-04-11 15:13:50

+0

添加了一個用於在代碼中分割名稱的示例。 – 2012-04-11 15:50:39