我正在学习C#,在其中一项任务中,我必须在使用WPF应用程序和Web引用单击按钮时将Access文件中的数据显示到DataGrid中。
有一个我无法解决的SOAP异常,感谢任何帮助,提前感谢 -
Web引用asmx文件包含以下方法,单击按钮时调用该方法 -
[WebMethod]
public ArrayList queryDB()
{
string selectStmt = "select * from Students";
OleDbConnection conn_obj = new DBConnect().checkDBStatus(databaseLocation);
conn_obj.Open();
OleDbCommand query = new OleDbCommand(selectStmt, conn_obj);
OleDbDataReader dbReader = query.ExecuteReader();
ArrayList dbRecordList = new ArrayList();
foreach (DbDataRecord dbRecord in dbReader)
{
dbRecordList.Add(dbRecord);
}
conn_obj.Close();
return dbRecordList;
}
WPF文件代码如下 - “按钮点击方法”
private void GetData_Click(object sender, RoutedEventArgs e)
{
ArrayList datagridList = (ArrayList) websrvc.queryDB();
dataGrid.ItemsSource = datagridList;
}
以上代码正在创建错误 - 无法将类型'object []'隐式转换为'System.Collections.ArrayList'
因此,基于对网络的建议,更改了以下代码 -
private void GetData_Click(object sender, RoutedEventArgs e)
{
object obj = websrvc.queryDB();
ArrayList datagridList = (ArrayList) obj;
dataGrid.ItemsSource = datagridList;
}
现在,似乎没有错误,但在下面的代码行中有一个例外,我无法解决 -
object obj = websrvc.queryDB();
{“System.Web.Services.Protocols.SoapException:服务器无法处理请求.---> System.InvalidOperationException:生成XML文档时出错.---> System.InvalidOperationException:System .Data.Common.DataRecordInternal无法序列化,因为它没有无参数构造函数。\ n System.Xml.Serialization.TypeDesc.CheckSupported()\ n在System.Xml.Serialization.TypeScope.GetTypeDesc(Type type,MemberInfo source) ,Boolean directReference,Boolean throwOnError)\ n在System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(Type type)\ n at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name,String ns,Object o,Boolean xsiType)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write2_queryDBResponse上的Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n,String ns,Object o,Boolean isNullable,Boolean needType)\ n (对象[] P)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(对象objectToSerialize,XmlSerializationWriter作家)\ n在System.Xml.Serialization.XmlSerializer.Serialize(的XmlWriter的XmlWriter,对象o,XmlSerializerNamespaces命名空间,字符串encodingStyle,String id)\ n ---内部异常堆栈跟踪的结尾--- \ n在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces namespaces,String encodingStyle,String id)\ n at在System.Web.Services.Protocols的System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object [] returnValues)\ n的System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object [] returnValues,Stream outputStream)\ n .WebServiceHandler.Invoke()\ n ---内部异常堆栈跟踪结束---“}
答案 0 :(得分:0)
让我知道这是否有效。