我正在用c#开发一个Windows窗体应用程序。我的数据库在wcf应用程序中处理。在我的wcf应用程序中,我有一个名为讲师的类,它有一个名为view lecturers()的方法,如下所示。我的目的是在网格视图中查看讲师表。
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 :(得分:0)
我不知道您的代码的确切错误,但我首先要提到的是,使用DataTable对象作为您的数据合同并不是最好的主意,因为它包含一定数量的额外数据,这些数据通常不被最终的申请。但无论如何,在您的特定情况下,WCF将无法序列化您的对象,因为它没有表名,这是此类执行序列化所必需的。尝试按照这种方式:
DataTable dt = new DataTable();
// Must set name for serialization to succeed.
dt.TableName = "lecturers";
我没有看到你遇到的实际错误(你应该发布它以使你的回答更清楚),但至少这会帮助你避免序列化错误。