我正在尝试使用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。
如评论中所述,您可以执行以下操作
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的问题
为避免问题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;
}
}
快乐的编码!对于后来者。