2011-07-23 7 views
-2

に書き込まれる前に、私は、データベースの列にXMLのノードを書いているが、私はXMLが再びテーブルに書き込まれる前に、データベースからすべての(*)を削除したいテーブルからすべてを削除します。は、XMLデータがテーブル

は今のところ「100」のユーザーIDを持つユーザーは、DBに挿入されている場合、コードがdupesをチェックしませんし、私はデシベル以上1ユーザID」100年代を持っています。カラムid(例えば)がxmlのidノードと一致するかどうかを確認する必要があります。一致がある場合、テーブル内の一致が、私は機能を作成したテーブルに

をID、V、およびノー​​ドを挿入しない場合は、Vおよびノー​​ドを更新し、private void deleteFromDb(string table)が、私は(それを呼び出すように見えるカントXMLデータがテーブルに挿入される前に、最初に正しく実行した場合)。しかし、これはすべてのデータをワイプが、ページにアクセスする最後の人は

<%@ Page Language="C#"%> 
<%@ Import namespace="System.Net"%> 
<%@ Import namespace="System.Data"%> 
<%@ Import namespace="System.Data.SqlClient"%> 
<%@ Import namespace="System.IO"%> 
<%@ Import namespace="System.Xml"%> 
<%@ Import Namespace="System" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server" language="C#"> 

public class XML 
{ 
    internal string connString = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString(); 

    private void add2Db(string table, string sqlRows, string sqlValues) 
    { 
     string sql = String.Format("INSERT INTO {0} ({1}) VALUES ({2})", table, sqlRows, sqlValues); 
     using (SqlConnection dbConn = new SqlConnection(connString)) 
     { 
      using (SqlCommand cmd = new SqlCommand(sql, dbConn)) 
      { 
       cmd.Connection.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

    private void deleteFromDb(string table) 
    { 
     string sql = String.Format("DELETE *", table); 
     using (SqlConnection dbConn = new SqlConnection(connString)) 
     { 
      using (SqlCommand cmd = new SqlCommand(sql, dbConn)) 
      { 
       cmd.Connection.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

    public void parseXML(XmlDocument doc) 
    { 
     string tsLogpro = ""; 
      string sqlRows = ""; 
      string sqlValues = ""; 

      //SELECT NODE: logPro 
      foreach (XmlNode logPro in doc.SelectNodes("broadcasting")) 
      { 
       tsLogpro = logPro.SelectSingleNode("@ts").InnerText; 

       //SELECT CHILD NODE: logPro 
       foreach (XmlNode child in logPro.ChildNodes) 
       { 

        //GET ROWS 
        foreach (XmlNode rows in child.Attributes) 
        { 
         sqlRows += rows.Name + ", "; 
        } 

        //GET VALUES 
        foreach (XmlNode values in child.Attributes) 
        { 
         sqlValues += "'" + values.InnerText + "', "; 
        } 

        sqlRows = sqlRows.Substring(0, sqlRows.Length - 2); 
        sqlValues = sqlValues.Substring(0, sqlValues.Length - 2); 

        //Response.Write("\n\n"); 
        //Response.Write(sqlRows); 
        //Response.Write("\n" + sqlValues); 

        add2Db("flashcoms_chat7_broadcast", sqlRows, sqlValues); 

        sqlValues = ""; 
        sqlRows = ""; 

       } 
      } 
     } 
    } 

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.ExpiresAbsolute = DateTime.Now; 
    Response.AddHeader("Content-type", "text/plain"); 

    HttpRequest request = HttpContext.Current.Request; 
    System.IO.Stream body = request.InputStream; 
    System.Text.Encoding encoding = request.ContentEncoding; 
    System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); 
    XmlDocument doc = new XmlDocument(); 

    string s = reader.ReadToEnd(); 

    if (Request.Params["action"] != string.Empty && Request.Params["action"] == "test") 
     { 
      doc.InnerXml = "" + 
       "<broadcasting ts=\"12345\">" + 
        "<u id=\"1\" v=\"true\" a=\"true\" />" + 
        "<u id=\"2\" v=\"true\" a=\"true\" />" + 
        "<u id=\"3\" v=\"true\" a=\"false\" />" + 
        "<u id=\"4\" v=\"true\" a=\"true\" />" + 
        "<u id=\"5\" v=\"true\" a=\"true\" />" + 
       "</broadcasting>"; 
     } 
     else if (!string.IsNullOrEmpty(s)) 
    { 
     doc.InnerXml = s; 
    } 

    // Starting at line 111 in your original post 
    XML oXML = new XML(); 
    oXML.deleteFromDb("f_chat7_broadcast") 
    oXML.parseXML(doc); 
    Response.Write("Done"); 
    Response.End(); 
} 
    /* 
    * 
    * 
    SET ANSI_NULLS ON 
    GO 
    USE [DB] 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    CREATE TABLE [dbo].[f_chat7_broadcast](
     [id] [nchar](100) NULL, 
     [v] [nchar](10) NULL, 
     [a] [nchar](10) NULL 
    ) ON [PRIMARY] 
    GO 
    * 
    */ 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head id="Head1" runat="server"> 
     <title>blah blah</title> 
    </head> 
    <body> 
     <form id="Form2" method="post" runat="server"><% Page_Load(null, null); %></form> 
    </body> 
</html> 
+2

なぜあなたはページを呼び出しているを持っていません_Load(null、null)? Page_Loadは自動的に起動します(ページのライフサイクルの一部です)。 – Tim

+1

テーブルは一定期間にわたってデータを保持するか、または一時テーブルですか?前者の場合、XML文書からデータを読み込む前にテーブル内のデータを削除するだけで、重複したユーザーIDを避けることができます。 – Tim

+0

井戸ティム、 'id'ノードと 'id'カラムをチェックするソリューションはありますか? IDがテーブルに存在する場合は、a列とv列のみを更新し、そうでなければ、id、a、およびvデータをXMLからテーブルに挿入しますか? – Patriotec

答えて

0

この

string sql = String.Format("DELETE *", table); 

string sql = String.Format("DELETE FROM {0}", table); 

別のポイントでなければなりません:限り私はあなたを見ることができるように 悪い習慣で取り扱うすべての例外は(のtry/catch ...)セットアップ...

+0

申し訳ありませんが、私は完全に間違った使用を置く。 idがすでに存在する場合は、vと列を更新する必要があります。ごめんなさい – Patriotec

関連する問題