1

現在、変数を含むストア プロシージャを使用してデータベースからデータを取得していますが、結果を XML で返していました。このストア プロシージャを使用してテーブルからすべてのデータを取得でき、XML で返されます。

public string GetAllPatients()
        {
            string conn = @"Data Source=SNICKERS\SQLEXPRESS;Initial Catalog=VerveDatabase;Integrated Security=True";
            DataSet oDS = new DataSet();
            SqlDataAdapter oCMD = new SqlDataAdapter("getAll", conn);
            oCMD.Fill(oDS, "AllPatients");
            return oDS.GetXml();
        }

ただし、個々の患者レコードを取得して XML で返そうとすると、方法がわかりません。現在これを行っています。

public void getUser(int ParticipantID)
        {

            SqlConnection oConn = new SqlConnection();
            oConn.ConnectionString = @"Data Source=SNICKERS\SQLEXPRESS;Initial Catalog=VerveDatabase;Integrated Security=True";
            oConn.Open();
            DataSet oDS = new DataSet();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = oConn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "getUser";
            cmd.Parameters.Add(new SqlParameter("@ParticipantID",SqlDbType.Int));
            cmd.Parameters["@ParticipantID"].Value = 1; 
            SqlDataReader dr = cmd.ExecuteReader(); 
        }
4

3 に答える 3

2

SQL Server から XML を取得するには、ストアド プロシージャで次のような内容を読み取る必要があります。

 SELECT whatever
 FROM thetable
 WHERE ID = @participantID
 FOR XML AUTO

これにより、XML結果が生成され、それを読み取ることができます

 var xmlResult = dr[0];

説明の編集

2 番目の手順の最後の行にある datareader を、最初の手順と同様のコードに置き換えます。

        SqlDataAdapter oCMD = new SqlDataAdapter(cmd); 
        oCMD.Fill(oDS, "User"); 
        return oDS.GetXml(); 
于 2012-07-25T10:37:10.723 に答える
1

を使用cmd.ExecuteXmlReader()して取得XmlReaderし、次にそのメソッド(たとえばReadOuterXml)を使用してxmlを取得します。

于 2012-07-25T10:53:15.720 に答える
0

ストアド プロシージャからカスタム xml を返すには、Path メソッドを使用します。以下は、ADventure Works データベースの例です。

select c.customerID as "@ID",
c.accountnumber as "@AccountNumber",
c.rowguid as "comment()",
CAST('<Test/>' as XML ) as "node()",
c.CustomerType as "AdditionalInfo/@type",
c.modifieddate as "AdditionalInfo/text()",
c.rowguid as "node()"
from Sales.Customer c
where c.CustomerID in ( 1,2)
for xml path('Customer'),root('Customers');

 output

<Customers>
<Customer ID="1" AccountNumber="AW00000001">
  <!--3F5AE95E-B87D-4AED-95B4-C3797AFCB74F-->
  <Test />
  <AdditionalInfo type="S">2004-10-13T11:15:07.263</AdditionalInfo>3F5AE95E-B87D-4AED-95B4-C3797AFCB74F</Customer>
<Customer ID="2" AccountNumber="AW00000002">
  <!--E552F657-A9AF-4A7D-A645-C429D6E02491-->
  <Test />
  <AdditionalInfo type="S">2004-10-13T11:15:07.263</AdditionalInfo>E552F657-A9AF-4A7D-A645-C429D6E02491</Customer>
 </Customers>

単純な xml を返すには、podiluska の回答を参照してください。

于 2012-07-25T10:43:54.987 に答える