Как вставить файл XML в столбец - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь загрузить настройки профиля пользователя xml (как целый файл в столбец с типом данных xml) в мою базу данных postgres, используя c #, вот мой код,

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 голосов
/ 13 июня 2018

Чтобы избежать проблемы 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;
                }



            } 

Удачного кодирования!для опоздавших.

0 голосов
/ 13 июня 2018

Как уже упоминалось в комментариях, вы можете сделать следующее

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 , так как это было изначально опубликовано для решенияпроблема с загрузкой XML, возникшая у OP.@ahammadalipk ответ охватывает проблему, которая возникла у ОП с Sql Injection

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