2

重複の可能性:
Excel 2003 VBA から WCF クライアントを呼び出すにはどうすればよいですか?

VBA コードを使用して、Excel から WCF を使用して開発された Web サービスを呼び出したいと考えています。どうすればこれを行うことができますか? メソッドを試してみましたGetObject()が、これを使用しているときに構文エラーが発生します。Web サービスから取得したデータを Excel で表示したいと考えています。助けてください。DataContract は次のとおりです。

[DataContract] 
public class Data
{
    [DataMember]
    public int Id;
    [DataMember]
    public DateTime LockTime;
    [DataMember]
    public DateTime LoginTime;
    [DataMember]
    public DateTime LastDefenitionDate;
    [DataMember]
    public string NTLogin;
    [DataMember]
    public string SystemName;
}

ServiceContract は次のとおりです。

`

[ServiceContract]

interface IDataService
{
    [OperationContract]
    List<Data> GetData();
    [OperationContract]
    void SubmitData(Data data);
}

`

データベースにアクセスするための DataService は次のとおりです。

`

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]

public class DataService : IDataService { public static SQLConnection SQLDBConnection = new SQLConnection();

    #region IDataService Members

    public List<Data> GetData()
    {
        List<Data> datas = new List<Data>();
        try
        {
            if (SQLDBConnection.con.State == ConnectionState.Closed) SQLDBConnection.con.Open();
            datas.Clear();
            SqlCommand sqlcommand = new SqlCommand();
            sqlcommand.Connection = SQLDBConnection.con;
            sqlcommand.CommandText = "select * from tblData";
            sqlcommand.CommandType = CommandType.Text;
            SqlDataAdapter sqladapter = new SqlDataAdapter(sqlcommand);
            DataTable dt = new DataTable();
            sqladapter.Fill(dt);

            Data data = null;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                data = new Data();
                data.Id = Convert.ToInt32(dt.Rows[i]["id"]);
                data.NTLogin = dt.Rows[i]["NTLogin"].ToString();
                data.SystemName = dt.Rows[i]["SystemName"].ToString();
                data.LockTime = Convert.ToDateTime(dt.Rows[i]["LockTime"]);
                data.LoginTime = Convert.ToDateTime(dt.Rows[i]["LoginTime"]);
                data.LastDefenitionDate = Convert.ToDateTime(dt.Rows[i]["LastDefenitionDate"]);
                datas.Add(data);
            }
        }
        catch (Exception ex)
        {  } 
        return datas;
    }

    public void SubmitData(Data data)
    {
        if (SQLDBConnection.con.State == ConnectionState.Closed) SQLDBConnection.con.Open();
        SqlCommand sqlcommand = new SqlCommand();
        sqlcommand.Connection = SQLDBConnection.con;
        sqlcommand.CommandText = "Insert into dbo.tblData(NTLogin, SystemName, LockTime, LoginTime, LastDefenitionDate) values ('" + data.NTLogin + "','" + data.SystemName + "','" + data.LockTime + "' , '" + data.LoginTime + "', '" + data.LastDefenitionDate + "')";
        sqlcommand.CommandType = CommandType.Text;
        int RowsAffected = sqlcommand.ExecuteNonQuery();
    }

    #endregion
}

`

編集:

重複する可能性のある提案の答えはうまくいきませんでした。私のコード全体をここに示します。質問を投稿する前に、その投稿を確認しました。私のコードを確認してください。

4

1 に答える 1

2

次の記事を読んでください。GetObject を使用して VBA コードから WCF サービスを呼び出す方法が詳しく説明されています。

WCF Service Moniker http://damianblog.com/2009/07/05/excel-wcf/を使用して Excel VBA クライアントから WCF サービスを呼び出す

ただし、単純な WCF サービス コントラクトに対してのみ機能します。より複雑なものについては、VSTO を使用する必要があります

UPD:このような場合、MEX コントラクトでモニカーを使用する場合は、プリミティブ型とプリミティブ型の配列のみを使用する必要があります。複合型を使用する必要がある場合は、文字列にパックするか、WCF モニカーと COM クライアント ( http://msdn.microsoft.com/en-us/library/ms752245.aspx ) または VSTOなどのより高度な手法を使用してください。 .

于 2012-10-05T12:39:38.603 に答える