2011-04-26 41 views
0

嗨朋友 自從過去一週以來,我一直在使用WCF。我寫了一些樣本,它包含2層,一個是業務層和一個DAL層。我想發送列表並希望返回列表。WCF中的轉換和返回列表

下面是代碼檢查糾正錯誤。

IEmployee.cs

[OperationContract] 
List<outEmployee> CreateEmployeeDetails(inemployee InsertEmployee); 

[DataContract] 
public class inemployee 
{ 
    public string EmployeeID { get; set; } 
    public string EmployeeName { get; set; }  
} 

public class outEmailTemplate 
{ 
    public string EmployeeID { get; set; } 
    public string EmployeeName { get; set; } 
} 

Employee.svc.cs

public List<outEmployee> CreateEmployeeDetails(inemployee InsertEmployee) 
{ 
    EmployeeDac emp = new EmployeeDac(); 
    return emp.InsertEmployeeDetails(InsertEmployee); 
} 

EmployeeDac.cs

public List<outEmployee> InsertEmailTemplate(inEmployee InsertEmp) 
{ 
    SqlConnection con = new SqlConnection(connectionstring); 
    SqlCommand cmd; 
    cmd = new SqlCommand("SP_InsertEmployee", con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("employeename", SqlDbType.VarChar).Value = InsertEmp.Employeename; 
    con.Open(); 
    string id = (string)cmd.ExecuteScalar(); 
    con.Close(); 
    List<inemployee> oet = new List<inemployee>(); 
    oet.Add(id); 
    return oet; 
} 

任何人都可以糾正錯誤並重寫代碼。

這裏我想把列表返回給ui(silverlight)。

+1

會發生什麼情況?你有錯誤嗎?如果是這樣:**究竟是什麼**?另外 - 你正在顯示一個'inemployee'和一個'outemailtemplate'類型,但是你的服務返回的類型'outemployee'卻不存在...... – 2011-04-26 13:55:15

+0

在employeedac中的返回行中出錯。 – Raj 2011-04-26 13:57:16

+0

Outemailtemplate是outemployee我忘記更改 – Raj 2011-04-26 13:58:51

回答

1

幾個問題:

1)您數據契約是不完全的 - 你需要首先裝點在您的服務方法(用於輸入所有類和輸出參數)與[DataContract],!你也應該裝點所有成員與[DataMember]被序列化:

[DataContract] 
    public class inemployee 
    { 
     [DataMember] 
     public string EmployeeID { get; set; } 
     [DataMember] 
     public string EmployeeName { get; set; }  
    } 

    [DataContract] 
    public class outemployee 
    { 
     [DataMember] 
     public string EmployeeID { get; set; } 
     [DataMember] 
     public string EmployeeName { get; set; } 
    } 

BTW:爲什麼你有兩種不同的類型 - inemployeeoutemployee ??只有一種類型Employee就足夠了? 2)你的DAL層應該包含最佳實踐:將你的SqlConnectionSqlCommand封裝成塊;爲您的VARCHAR參數,總是定義長度!最重要的是:如果您想返回List<outemployee>,則需要創建一個outemployee的列表 - 不是inemployee

而且玩完:你找回string類型的id和你想添加stringList<outemployee> - 這當然會從未工作!鑑於id,您需要創建一個outemployee的實例,並將添加到列表

public List<outEmployee> InsertEmailTemplate(inEmployee InsertEmp) 
    { 
     using(SqlConnection con = new SqlConnection(connectionstring)) 
     using(SqlCommand cmd = new SqlCommand("SP_InsertEmployee", con)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("employeename", SqlDbType.VarChar, 100).Value = InsertEmp.Employeename; 

      con.Open(); 
      string id = (string)cmd.ExecuteScalar(); 
      con.Close(); 
     } 

     // you want to return outemployee - 
     // so you need to create an outemployee! 
     List<outemployee> oet = new List<outemployee>(); 

     // create a new instance of an "outemployee" 
     outemployee emp = new outemployee(); 

     // set the EmployeeID property of the "outemployee" to "id" 
     emp.EmployeeID = id; 

     // add new "outemployee" to list 
     oet.Add(emp); 

     return oet; 
    } 
+0

仍然會得到錯誤,返回oet和oet。添加(ID) – Raj 2011-04-26 14:08:06

+0

沒有即時消息不創建實例,你說oet.add(ID)從來沒有工作,但我想返回到前端的ID。現在我能做些什麼 – Raj 2011-04-26 14:11:26

+0

我可以在哪裏創建? – Raj 2011-04-26 14:15:19