Удалить все из таблицы до того, как данные XML будут записаны в таблицу - PullRequest
0 голосов
/ 24 июля 2011

Я записываю узлы XML в столбцы базы данных, но я хочу удалить все (*) из базы данных, прежде чем XML снова будет записан в таблицу.

Прямо сейчас, если пользователь с идентификатором пользователя«100» вставлено в БД, код не проверяет наличие дупликов, и у меня будет более 1 идентификатора пользователя «100» в БД.Мне нужно проверить, если идентификатор столбца (например) соответствует узлу идентификатора XML.если есть совпадение, обновите v и ноды, если нет совпадения в таблице, затем вставьте id, 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>

1 Ответ

0 голосов
/ 24 июля 2011

this

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

должно быть

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

другой момент: насколько я вижу, вы не настроили обработку исключений (try / catch ...)что плохая практика ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...