2017-03-04 90 views
0

我正在開發c#中的Windows窗體應用程序。我的數據庫在wcf應用程序中處理。在我的wcf應用程序中,我有一個名爲lecturer的類,它有一個名爲view lecturers()的方法,如下所示。我的目的是在網格視圖中查看講師表。在wcf服務響應中接收DataTable時發生錯誤

public DataTable viewLec() 
     { 

      SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["resourceAlloc"].ToString()); 

      DataTable dt = new DataTable(); 
      string vw = "select * from lecturers"; 

      SqlCommand cmd = new SqlCommand(vw,con); 

      SqlDataAdapter adp = new SqlDataAdapter(cmd); 
      adp.Fill(dt); 


      return dt; 

     } 

在我IService1.cs:

[OperationContract] 
     DataTable viewLecturer(); 

Service1.svc.cs:

public DataTable viewLecturer() 
     { 
      Lecturer lec = new Lecturer(); 
      return lec.viewLec(); 

     } 

在我的Windows窗體應用程序按鈕點擊事件,

private void button2_Click(object sender, EventArgs e) 
{ 
    Service1Client obj = new Service1Client(); 
    dataGridView1.DataSource = obj.viewLecturer();  
} 

當我點擊查看按鈕發生上述錯誤,我不明白爲什麼?

回答

0

我不知道你的代碼的確切錯誤,但我想提到的第一件事是,使用DataTable對象作爲你的數據契約不是最好的主意,因爲它包含一定數量的通常不被消耗的額外數據由最終的應用程序。但無論如何,在你的特定情況下,WCF將無法序列化你的對象,因爲它不會有表名,這個類是強制執行序列化的。嘗試按照這種方式:

DataTable dt = new DataTable(); 
// Must set name for serialization to succeed. 
dt.TableName = "lecturers"; 

我沒有看到你有實際的錯誤(你應該張貼它使你的答案更加清晰),但至少這將幫助你避免序列化錯誤。

+0

雅這是錯誤..我沒有提到表名,現在好了 –

+0

@HishamNawzer不客氣 – Alex