我尝试使用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。
答案 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;
}
}
快乐的编码!对于后来者。