2016-12-21 17 views
1

私はストアドプロシージャを呼び出すWeb APIを用意しています。ストアドプロシージャを挿入/更新し、データベースのレコードを選択します。挿入/更新が、私はXMLのレスポンスを構築する方法ではないと確信してExecuteReaderをXML HTTPレスポンスに変換する

[HttpGet] 
    public HttpResponseMessage Get(string Account) 
    { 
     if (string.IsNullOrEmpty(Account)) 
     { 
      return Request.CreateResponse(new { error = "Input parameters cannot be Empty or NULL" }); 
     } 
     string strcon = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; 
     SqlConnection DbConnection = new SqlConnection(strcon); 
     SqlDataReader reader = null; 
     DbConnection.Open(); 

     SqlCommand command = new SqlCommand("[dbo].[usp_InserUpadte]", DbConnection); 
     command.CommandType = CommandType.StoredProcedure; 

     //create type table 
     DataTable table = new DataTable(); 
     table.Columns.Add("AccountID", typeof(string)); 
     table.Rows.Add(Account); 

     SqlParameter parameter = command.Parameters.AddWithValue("@account_TT", table); 
     parameter.SqlDbType = SqlDbType.Structured; 
     parameter.TypeName = "account_TT"; 

     XmlReader xreader = command.ExecuteXmlReader(); 

     List<QueryResult>qresults = new List<QueryResult>(); 

     while (xreader.Read()) 
     { 
      QueryResult qr = new QueryResult(); 
      qr.AccountID = xreader["AccountID"].ToString(); 
      qr.CounterSeq = xreader["CounterSeq"].ToString(); 

      qresults.Add(qr); 
     } 

HTTPResponseMessageExecuteReaderを使用して読み込まれ、選択したレコードを変換しようとすると、動作しますが、私はQueryResultではというクラスを作成したが、私は、もしわかりませんこれはXMLレスポンスの作成に使用できます。

public class QueryResult 
{ 
     public string AccountID { get; set; } 
     public string CounterSeq { get; set; } 
} 

はまた、私はAPIが実行されるときにファイルにtheresponseを記述しようとしています。私はJSONとOracleDatabaseを使ってこの問題を解決しました。どんな助けでも大歓迎です。

答えて

0

qresultsオブジェクトを返すだけで、XML(またはJSON)に自動的にシリアル化されます。あなたは、XMLを得るためにあなたのQueryResultクラスに属性を追加する方法を読むことができますが、ここでJSON and XML Serialization in Web API

それを希望の方法を構造化私はまたIHttpActionResultを返す代わりにHttpResponseMessageアップを構築することをお勧めします。そして、あなたは単にあなたのメッセージの最後にこれを行うことができますし、それが自動的にHTTP ACCEPTヘッダに基づいてシリアライズされます。

[HttpGet] 
public IHttpActionResult Get(string Account) 
{ 
    // rest of implementation left out for readability...  
    return Ok(qresults); 
} 
+0

私はあなたがのExecuteReaderを使用し、Web APIを処理させることができてExecuteReaderまたはXmlReaderを – Sid

+0

を使用する必要がありますかシリアライゼーション。 –

+0

XmlReaderを使用すると、xreader = command.ExecuteXmlReader();が発生します。 ExecuteXmlReaderに送信された無効なコマンドのようなエラーをスローします。コマンドはXML結果を返す必要があります – Sid

関連する問題