سؤال

أنا بحاجة إلى العودة محتويات عمود xml في sql server عميل ببساطة عن طريق النقر على رابط.Xml وقد معالجة التعليمات لفتح التطبيق الصحيح (Infopath في هذه الحالة).

أنا مشوشة قليلا إلى مختلف xmlreader الكتاب والجداول المتاحة.أعتقد أنني أريد أن وإرسال محتويات SQLs ExecuteXmlReader إلى الاستجابة.OutputStream - ولكن أنا متأكد من كيفية راسيا معا.

شكرا مقدما

هل كانت مفيدة؟

المحلول 4

وحصلت عليه العمل ببساطة عن طريق استخدام Response.Write مع أكس كنص، ولكن ما زلت غير متأكد ما إذا كان ينبغي حقا أن تستخدم XmlReaders ومجاري المياه. وهنا ما فعلته:

SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select Name, InfopathDoc from document where id = @id";
cmd.Parameters.AddWithValue("@id", docId);

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr.Read())
    {
        Response.ContentType = "application/xml";
        Response.AppendHeader("Content-disposition", "attachment; filename=" + dr["Name"]);
        Response.Write(dr["InfopathDoc"]);
    }

نصائح أخرى

وأود أن أقترح الحصول على XML من قاعدة البيانات كنص، ثم إنشاء صفحة حيوي وتعيين نوع MIME في رأس إلى "التطبيق / أكس". وهذا ينبغي أن تخبر المتصفح لDTRT (على افتراض تم تكوينه بشكل صحيح).

إذا كنت لا تعمل مع تطبيق ويب، فإنك قد ترغب في النظر في استخدام الدقة في تحليل النص وتحديد التطبيق لإطلاق، ثم يطعمه وXML (إما باستخدام ملف مؤقت أو عن طريق إعادة توجيه إدخال بعض نوع).

ومنذ كنت لا تعطي أي مؤشر على ما التقنيات التي تستخدمها وراء XML و SQL Server، فإنه من الصعب أن تكون محددة حقا.

لماذا لا مجرد الاستعلام عن قاعدة بيانات باستخدام SQL القياسية عن محتويات العمود XML، والاستيلاء أنه في صفحة وتيار هذه السلسلة إلى المستخدم؟

وشيء من هذا القبيل:

string xmlContents = string.Empty;

using(SqlConnection _con = new SqlConnection("server=(local);database=Northwind;Integrated Security=SSPI;")
{
  string queryStatement = "SELECT XmlColumn FROM dbo.MyTable WHERE id = @ID";

  using(SqlCommand _cmd = new SqlCommand(queryStatement, _con)
  {
    _cmd.Parameters.AddWithValue("@ID", 5555);

    _con.Open();

    xmlContents = _cmd.ExecuteScalar().ToString(); // returns an object
    _con.Close();
  }
}

وبعد ذلك فقط تيار إعادة XML للمستخدم، على سبيل المثال، استخدام Response.Write (xmlContents) - شيء تقريبا على طول تلك الخطوط. (لم تضم أي معالجة الأخطاء - سأترك هذا متروك لكم للتعامل مع :-))

هل تساعد أي؟

ومارك

SQL 2005 وما بعدها دعم FOR XML البيان.انظر هنا

على سبيل المثال:

SELECT * FROM MyTable FOR XML RAW;

هناك كلمات أخرى عن التغيير والتبديل علامة XML أسماء مختلفة عن datrabase الأعمدة أيضا.

ثم ننظر في ExecuteXmlReader الوثائق لأي قيادة من الدرجة التي تستخدم في C#.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top