0

次のような署名を持つSQLServer2005ストアドプロシージャがあります。

CREATE PROCEDURE [dbo].[ProcTRequest] 
   @Pxml xml, @ClientCode varchar(10) 
AS
BEGIN
  ...
END

.asmxこのストアドプロシージャを呼び出すWebサービスを作成する必要があります。これは私がブロックを持っているところです。

パラメータ@PxmlがC#Webメソッドで文字列として指定されている場合、次のようになります。

サーバーはリクエストを処理できませんでした。

次にXmlText、のタイプとして試してみ@Pxmlました。

サーバーはリクエストを処理できませんでした。メソッドMyWebService.MyWebMethodは反映できません。'PXml'を反映するエラーがありました。->; タイプ'System.Xml.XmlText'を反映するエラーがありました。-> System.Xml.XmlTextは次のように使用できません:'xml要素'。

C#Webメソッドからこのストアドプロシージャを呼び出す正しい方法は何ですか?@Pxmlパラメータは常に整形式のXMLであることに注意してください。

このWebサービスを呼び出す人は、UnixシステムでCurlを使用しています。

要件はASMXですが、これをWCF経由で実装できる場合は、擬似コードを使用してその方法を教えてください。私はまだWCFに精通していません。

助けてください。ありがとうございました。

更新:これは私がSPと呼ぶ方法です

 [WebMethod]
 public string GetRequestID(string PXml, string clientcode)
    {
        Database db = DatabaseFactory.CreateDatabase();
        using (IDataReader dr = db.ExecuteReader("ProcRequestID", PXml, clientcode))
        {
            return dr["RequestID"].ToString();
        }
    }
4

1 に答える 1

2

ASMXインターフェイスで文字列を使用できませんでした(呼び出し元から文字列が送信されます)が、ASMX Webサービス内@PXmlで、ストアドプロシージャ呼び出しのパラメーターを次のように定義しますSqlDbType.Xmlか?私はそれがうまくいくはずだと思います...。

の線に沿った何か:

[WebMethod]
public void MyWebMethod(string input, string clientCode)
{
        using (SqlConnection conn = new SqlConnection(your-connection-string-here))
        using (SqlCommand cmd = new SqlCommand("dbo.ProcTRequest", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@Pxml", SqlDbType.Xml);
            cmd.Parameters.Add("@ClientCode", SqlDbType.VarChar, 10);

            cmd.Parameters["@Pxml"].Value = input;
            cmd.Parameters["@ClientCode"].Value = clientCode;

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
}

ストアドプロシージャを呼び出しているだけで、結果セットが返されることを期待していないため、のExecuteNonQuery代わりにを使用してExecuteReaderください。

また、非常に重要です。ストアドプロシージャを呼び出していることをADO.NETに通知してください。これがこの行の機能です。

            cmd.CommandType = CommandType.StoredProcedure;

それ以外の場合、ADO.NETはデフォルトで完全なインラインSQLステートメントを取得することを想定しており、それを解析して実行できない可能性があります...。

于 2012-11-14T22:20:20.483 に答える