0

データベースからドロップダウン アイテムのリストを取得しようとしています。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();
        }
    }
4

1 に答える 1

1

マイクロソフトから:

DataTable、DataRow、DataView、および DataViewManager オブジェクトはシリアル化できず、XML Web サービスから返すこともできません。完全でない DataSet を返すには、返すデータを新しい DataSet にコピーする必要があります。

出典: DataTable を返す XML Web サービスを使用する際の問題

注: 上記のソースには、状況に応じて機能する可能性のある代替手段が含まれています。簡単に言うと、DataSet を返します。

于 2012-09-17T18:55:55.407 に答える