データベースからドロップダウン アイテムのリストを取得しようとしています。Web サービスを使用してデータベースにアクセスしていない場合、コードは適切に機能しますが、Web サービスを使用してデータベースにアクセスすると、Soap Exception が発生します。これがコードです、助けてください。
例外は次のとおりです。
System.Web.Services.Protocols.SoapException: Server was unable to process request. --->
System.InvalidOperationException: There was an error generating the XML document. --->
System.InvalidOperationException: Cannot serialize the DataTable. DataTable name is not set.
at System.Data.DataTable.WriteXmlSchema(XmlWriter writer, Boolean writeHierarchy)
メソッドは次のとおりです。
private void retrieveStates()
{
dataService = new PCDDA.Service();
DataTable dt = new PCDDA.Service().GetStates();
DDLSelectState.DataSource = dt;
DDLSelectState.DataTextField = "RegionName";
DDLSelectState.DataValueField = "RegionID";
DDLSelectState.DataBind();
DDLSelectState.Items.Insert(0, new ListItem("<Select State>", "0"));
}
以下は、Web サービスの Service.cs クラスにある GetStates() Web メソッドです。
[WebMethod]
public DataTable GetStates()
{
DbPostcardOTR db = new DbPostcardOTR();
try
{
DataTable loadstates = db.LoadStates();
return loadstates;
}
catch (Exception ex)
{
throw new Exception("Unable to retrieve or load States from the database. The Exception is :" + ex.Message);
}
}
これは、DbPostcardOTR.cs の LoadStates() メソッドです。
public DataTable LoadStates()
{
DataTable States = new DataTable();
SqlConnection con = OpenConnection();
try
{
string selectSQL = "Select RegionID, RegionName from PCDDev.dbo.tblDistributionArea";
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader dr = cmd.ExecuteReader();
States.Load(dr);
return States;
}
finally
{
if (con != null)
con.Close();
}
}