2012-06-19 42 views
2

任何人都可以幫助我使用C#將XML數據(我從遠程REST服務獲得)插入到我的數據庫中嗎?使用C#將REST服務中的XML數據插入到數據庫中

在此先感謝。

代碼

HttpWebRequest myHttpWebRequest = WebRequest.Create("http://api.asicentral.com/v1/news.xml") as HttpWebRequest; 

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 

Encoding enc = System.Text.Encoding.GetEncoding(1252); 
StreamReader loResponseStream = 
    new StreamReader(myHttpWebResponse.GetResponseStream(), enc); 

string Response = loResponseStream.ReadToEnd(); 
myHttpWebResponse.Close(); 
+1

[你嘗試過什麼?](http://whathaveyoutried.com) –

+0

我試着用C#來檢索遠程REST服務的數據,並也得到了XML數據,但我不知道如何將該XML插入到mssql中。 – ramesh

回答

0

開始學習ADO.Net http://www.csharp-station.com/Tutorial/AdoDotNet/lesson01

或者試試這個實體框架代碼優先方法http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

好了,所以上面是有點鈍,所以你想,爲什麼將Web服務響應存儲到數據庫中?

要做任何有意義的事情,你可能會想解析XML。你在這裏有很多選擇。想起一對夫婦;將xml反序列化成一個強類型對象,或者使用linq創建一個匿名類型。最後,您可以使用ADO.Net或Entity Framework將對象存儲到數據庫中。

0

爲了將此XML插入到SQL Server中,您需要在SQL Server中具有一個XML類型的列。

然後你可以用很簡單的東西,如:

string connectionString = "......"; // define your connection string here 
string query = "INSERT INTO dbo.YourTableNameHere(XmlColumn) VALUES(@XmlContent)"; 

// set up SqlConnection and SqlCommand 
using(SqlConnection conn = new SqlConnection(connectionString)) 
using(SqlCommand cmd = new SqlCommand(query, conn)) 
{ 
    // define parameter for query and set its value to your XML response 
    cmd.Parameters.Add("@XmlContent", SqlDbType.VarChar, -1); 
    cmd.Parameters["@XmlContent"].Value = Response; // assign your XML response here 

    // open connection, execute INSERT, close connection 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close();  
} 

當然,如果你使用類似實體框架或其他一些ORM,那麼事情會看很多不同的....這只是「直線上升的」純ADO.NET

+0

即時通訊接收響應爲XML,但我不知道我是否必須將其保存爲XML文件,然後存儲在數據庫中,或者我可以存儲它,而不保存它的文件。 – ramesh

+0

@ramesh:上面的代碼將它存儲到數據庫中 - 從您獲得的'Response'字符串中 - 不需要先將其存儲到文件中..... –

0
[WebMethod] 
    public void XMLPersing() 
    { 
     var XMLDATA = ""; 

     WriteLogCLS objWriteLog = new WriteLogCLS(); 
     Stream receiveStream = HttpContext.Current.Request.InputStream; 
     receiveStream.Position = 0; 
     StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);  //For xml persing.. 
     XMLDATA = readStream.ReadToEnd(); 
     readStream.Close(); 

     objWriteLog.WriteLog(Convert.ToString(XMLDATA)); 
     XmlTextReader xmlreader = new XmlTextReader(Server.MapPath("Log/Exception/Sample.xml")); 
     DataSet ds = new DataSet(); 
     ds.ReadXml(xmlreader); 
     xmlreader.Close(); 
     if (ds.Tables.Count != 0) 
     { 
      var strCon = string.Empty; 
      strCon = ConfigurationManager.AppSettings["constring"]; 
      SqlCommand cmdInsertXMLData = new SqlCommand(); 
      SqlConnection SqlConn; 
      SqlConn = new SqlConnection(strCon); 
      try 
      { 
       cmdInsertXMLData = new SqlCommand("usp_InsertXML", SqlConn); 
       cmdInsertXMLData.CommandType = CommandType.StoredProcedure; 
       // cmdInsertLoginDetails.Parameters.Add("@XMLdata", SqlDbType.Xml).Value = ds.GetXml(); 
       cmdInsertXMLData.Parameters.AddWithValue("@XMLdata", SqlDbType.Xml); 

       if (SqlConn.State == ConnectionState.Closed) 
       { 
        SqlConn.Open(); 
       } 
       cmdInsertXMLData.ExecuteNonQuery(); 
       // response = cmdInsertLoginDetails.Parameters["@Message"].Value.ToString(); 
      } 
      catch (Exception ex) 
      { 
       objWriteLog.WriteLog("Error on XML Persing : " + ex.Message); 
       // response = "Error"; 
      } 
      finally 
      { 
       if (cmdInsertXMLData != null) 
       { 
        cmdInsertXMLData.Dispose(); 
       } 
       if (SqlConn.State == ConnectionState.Open) 
       { 
        SqlConn.Close(); 
        SqlConn.Dispose(); 
       } 
       objWriteLog = null; 
      } 
      // return response ; 

     } 
    } 
} 
相關問題