1. 程式人生 > >關於在.net通過XML傳送資料

關於在.net通過XML傳送資料

1.將從資料庫中抽取出來的資料轉換成陣列,再將陣列插入list中
1)從資料庫中抽取資料
` MySqlParameter param1 = new MySqlParameter(“?_work_no”, MySqlDbType.String, 20);
param1.Value = work_no + “”;
MySqlParameter[] parameters = { param1 };
reader2 = ExcuteReader(“GetRouteFromView”, CommandType.StoredProcedure, parameters)
2)將陣列插入List中

  List<System.String> listS = new List<System.String>();
   while (reader2.Read())
   {
                    Console.WriteLine(reader2[0].ToString() + "###" + reader2.GetValue(1).ToString());
                    String[] arr = new String[] { reader2[0].ToString(), reader2.GetValue(1).ToString
(), reader2.GetValue(2).ToString(), reader2.GetValue(3).ToString() }; listS.AddRange(arr); }

3)將List物件序列化

string temp = HomeController.Serializer(listS.GetType(), listS);

序列化方法:

  public static string Serializer(Type type, object obj)
         {
             MemoryStream Stream = new
MemoryStream(); XmlSerializer xml = new XmlSerializer(type); try { //序列化物件 xml.Serialize(Stream, obj); } catch (InvalidOperationException) { throw; } Stream.Position = 0; StreamReader sr = new StreamReader(Stream); string str = sr.ReadToEnd(); sr.Dispose(); Stream.Dispose(); return str; }

2.直接將資料庫抽取的表格放到DataSet,然後再通過將DataSet轉化成XML,返回字串

  public string GetPositionXML(string work_no)
        {
            //MySqlDataReader reader2 = null;
            string strXML = "";
            try
            {
                //訪問資料庫,查詢資料 
                MySqlParameter param1 = new MySqlParameter("?_work_no", MySqlDbType.String, 20);
                param1.Value = work_no + "";
                MySqlParameter[] parameters = { param1 };
                strXML = ExcuteReaderXmL("GetRouteFromView", CommandType.StoredProcedure, parameters);         
                   return strXML;
            }
            catch (Exception e)
            {
                return "查詢出現異常" + e.ToString();
            }
            finally
            {
               // reader2.Close();
            }
        }

        //將DataSet轉化成XML,返回字串
        static public string ExcuteReaderXmL(string sql, CommandType type, params MySqlParameter[] parameters)
        {
            MySqlConnection conn = new MySqlConnection();
            //連結資料庫相關地址
            string str = "";
            try
            {
                conn.Open();
                Console.WriteLine("成功連線到資料庫!");
                MySqlDataAdapter adapter = new MySqlDataAdapter();
               // MySqlCommand command = new MySqlCommand(sql, conn);
                adapter.SelectCommand = new MySqlCommand(sql, conn);
                adapter.SelectCommand.CommandType = type;
                DataSet ds = new DataSet();
                DataTable dt = new DataTable("userData");
                if (parameters != null)
                {
                    adapter.SelectCommand.Parameters.AddRange(parameters);
                    adapter.Fill(ds);
                    ds.DataSetName = "Positions";
                    str = ConvertDataSetToXML(ds);

                }
                return str;
            }
            catch (System.Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                // conn.Close();
            }
        }
        //將dataset轉化成字串
        public static string ConvertDataSetToXML(DataSet xmlDS)
        {
            MemoryStream stream = null;
            XmlTextWriter writer = null;

            try
            {
                stream = new MemoryStream();
                //從stream裝載到XmlTextReader  
                writer = new XmlTextWriter(stream, Encoding.Unicode);

                //用WriteXml方法寫入檔案.  
                xmlDS.WriteXml(writer);
                int count = (int)stream.Length;
                byte[] arr = new byte[count];
                stream.Seek(0, SeekOrigin.Begin);
                stream.Read(arr, 0, count);

                UnicodeEncoding utf = new UnicodeEncoding();
                return utf.GetString(arr).Trim();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (writer != null) writer.Close();
            }
        }