0

SQL Server からデータを取得する必要がある Windows アプリケーションを作成しました。これを簡単に行うために、XML Web サービスも用意しています。DataSet を返すために使用するコードは次のとおりです。

[WebMethod]
public DataSet GetDataSet(SqlCommand cmd)
{
    using (SqlConnection Conn = new SqlConnection(ConnString))
    {
        cmd.Connection = Conn;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        try
        {
            //Conn.Open();
            using (DataSet DS = new DataSet())
            {
                da.Fill(DS);
                return DS;
            }
        }
        catch (Exception ex)
        {
            return (new DataSet());
        }
        finally
        {
            if (da != null)
            {
                da.Dispose();
            }
        }
    }
}

Web サービスを Win アプリケーション プロジェクトに追加しようとすると、次のエラーが表示されます。

System.ComponentModel.ISite 型のメンバー System.ComponentModel.Component.Site はインターフェイスであるため、シリアル化できません

4

2 に答える 2

1

SqlCommandはシリアル化できないため、関数でインスタンス化する必要があります。

 [WebMethod]
 public DataSet GetDataSet()
 {
 SqlCommand cmd = new SqlCommand();
 using (SqlConnection Conn = new SqlConnection(ConnString))
 {
    cmd.Connection = Conn;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    try
    {
        //Conn.Open();
        using (DataSet DS = new DataSet())
        {
            da.Fill(DS);
            return DS;
        }
    }
    catch (Exception ex)
    {
        return (new DataSet());
    }
    finally
    {
        if (da != null)
        {
            da.Dispose();
        }
    }
  }
}
于 2012-11-15T13:38:31.283 に答える
1

インターフェイスオブジェクトをシリアライズできないと思うので、次の記事を読むことをお勧めします:-

http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/bac96f79-82cd-4fef-a748-2a85370a8510/

于 2012-11-15T13:23:36.263 に答える