在wcf服务响应中接收DataTable时发生错误

问题描述:

我正在开发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();  
} 

当我点击查看按钮发生上述错误,我不明白为什么?

我不知道你的代码的确切错误,但我想提到的第一件事是,使用DataTable对象作为你的数据契约不是最好的主意,因为它包含一定数量的通常不被消耗的额外数据由最终的应用程序。但无论如何,在你的特定情况下,WCF将无法序列化你的对象,因为它不会有表名,这个类是强制执行序列化的。尝试按照这种方式:

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

我没有看到你有实际的错误(你应该张贴它使你的答案更加清晰),但至少这将帮助你避免序列化错误。

+0

雅这是错误..我没有提到表名,现在好了 –

+0

@HishamNawzer不客气 – Alex