如何将XML文件插入列中

时间:2018-06-13 11:14:04

标签: c# postgresql

我尝试使用c#将用户配置文件设置xml(作为整个文件整合到xml数据类型的列中)到我的postgres数据库中,这是我的代码,

var connstring = System.Configuration.ConfigurationManager.ConnectionStrings["pgcon"].ConnectionString;

using (NpgsqlConnection conn = new NpgsqlConnection(connstring))
{
    conn.Open();

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("G:\\new repo\\setting xmls\\settings.xml");
    //workinq query insert
    //  string sql2 = string.Format(@"INSERT INTO Public.""UserDetails"" (id, usercode, address) VALUES ('dd', 'code', '1001')");

    NpgsqlCommand dbcmd = conn.CreateCommand();
    try
    {                       
        string sql = string.Format("SET SEARCH_PATH to Public;");                          
        string sql0 = string.Format(@"INSERT INTO Public.""UserProfile"" (setting, userstatus, userstatusdescription, id) VALUES ('{0}', true, 'active', 'ddd');", xmlDoc);

        dbcmd.CommandText = sql + sql0;
        dbcmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        throw;
    }
}

但是,它在表格中上传为System.Xml.XmlDocument,我需要将其另存为xml。

enter image description here 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如评论中所述,您可以执行以下操作

string myXml = XDocument.Load("G:\\new repo\\setting xmls\\settings.xml").ToString()

然后

string sql0 = string.Format(@"INSERT INTO Public.""UserProfile"" (setting, userstatus, userstatusdescription, id) VALUES ('{0}', true, 'active', 'ddd');", myXml);

请使用@ahammadalipk answer,因为这最初是为解决OP所遇到的XML上传问题而发布的。 @ahammadalipk回答了解OP与Sql Injection的问题

答案 1 :(得分:1)

要避免问题 LITTLE BOBBY TABLES!(当xml数据包含单引号和注入错误时出错),而不是直接在查询中添加参数,您可以使用NpgsqlParameter类。

而不是这个,

string sql0 = string.Format(@"INSERT INTO Public.""UserProfile"" (setting, userstatus, userstatusdescription, id) VALUES ('{0}', true, 'active', 'ddd');", myXml);

这样做,

NpgsqlParameter p = new NpgsqlParameter("@myXml", NpgsqlTypes.NpgsqlDbType.Xml);
                    p.Value = myXml;  

完整代码,

 using (NpgsqlConnection conn = new NpgsqlConnection(connstring))
            {
                conn.Open();    
                string myXml = XDocument.Load("G:\\new repo\\setting xmls\\settings.xml").ToString();                     
                NpgsqlCommand dbcmd = conn.CreateCommand();
                try
                {

                    string sql = string.Format("SET SEARCH_PATH to Public;");                     
                    string sql0 = string.Format(@"INSERT INTO Public.""UserProfile"" (setting, userstatus, userstatusdescription, id) VALUES (@myXml, true, 'active', 'ddd');");                    
                    dbcmd.CommandText = sql + sql0;
                    NpgsqlParameter p = new NpgsqlParameter("@myXml", NpgsqlTypes.NpgsqlDbType.Xml);
                    p.Value = myXml;                   
                    dbcmd.Parameters.Add(p);
                    dbcmd.ExecuteNonQuery();

                }
                catch (Exception ex)
                {

                    throw;
                }



            } 

快乐的编码!对于后来者。