J'écris les noeuds d'un code XML dans les colonnes de la base de données, mais je souhaite supprimer tout (*) de la base de données avant d'écrire à nouveau dans la table.Tout supprimer de la table avant l'écriture des données XML dans la table
Maintenant, si un utilisateur avec l'ID utilisateur '100' est inséré dans la base de données, le code ne vérifie pas les dupes et je vais avoir plus de 1 ID utilisateur '100 dans la base de données. J'ai besoin de vérifier si l'identifiant de la colonne (par exemple) correspond au nœud id du xml. S'il y a une correspondance, mettez à jour le v et les noeuds, s'il n'y a pas de correspondance dans la table puis insérez l'identifiant, v et un noeud dans la table
J'ai créé une fonction, private void deleteFromDb(string table)
mais je ne peux pas l'appeler (si je l'ai fait correctement en premier lieu) avant que les données XML soient insérées dans la table. Mais cela efface toutes les données, mais la dernière personne qui accède à la page
<%@ 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>
Pourquoi appelez-vous Page _Load (null, null)? Page_Load se déclenche automatiquement (cela fait partie du cycle de vie de la page). – Tim
La table est-elle destinée à conserver les données sur une période donnée ou est-elle plutôt une table temporaire? Si le premier, supprimer les données dans le tableau avant de charger les données du document XML juste pour éviter les doublons ID utilisateur me semble être paresseux. – Tim
Eh bien, Tim, avez-vous une solution pour vérifier le nœud 'id' par rapport à la colonne 'id'? Si l'ID existe dans la table, mettez à jour uniquement les colonnes a et v et si ce n'est pas le cas, insérez les données id, a et v du code XML dans la table. – Patriotec