C# 如何将XML文件插入列中
我正在尝试使用c#将一个用户配置文件设置xml(作为一个完整的文件放入xml数据类型的列)上传到我的postgres数据库中,下面是我的代码C# 如何将XML文件插入列中,c#,postgresql,C#,Postgresql,我正在尝试使用c#将一个用户配置文件设置xml(作为一个完整的文件放入xml数据类型的列)上传到我的postgres数据库中,下面是我的代码 var connstring = System.Configuration.ConfigurationManager.ConnectionStrings["pgcon"].ConnectionString; using (NpgsqlConnection conn = new NpgsqlConnection(connstring)) { con
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()
然后
请使用@ahammadalipk,因为这最初是为了解决OP的XML上传问题而发布的@AMMADALIPK答案涵盖了OP在Sql注入方面遇到的问题,如评论中所述,您可以执行以下操作
string myXml = XDocument.Load("G:\\new repo\\setting xmls\\settings.xml").ToString()
然后
请使用@ahammadalipk,因为这最初是为了解决OP的XML上传问题而发布的@ahammadalipk答案涵盖了OP在Sql注入中遇到的问题,以避免问题小BOBBY表(当xml数据包含单引号和注入错误时出错),您可以使用
npgsqlparmeter
类,而不是直接在查询中添加参数
而不是这个,
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;
}
}
快乐编码!对于后来者。为了避免这个问题小鲍比桌(当xml数据包含单引号和注入错误时出错),您可以使用
npgsqlparmeter
类,而不是直接在查询中添加参数
而不是这个,
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;
}
}
快乐编码!对于后来者。请尝试
string myXml=XDocument.Load(“G:\\new repo\\setting xmls\\settings.xml”)。ToString()
非常感谢,它工作正常。但还有一个问题,如果我的xml在一些标记中只有一个引号,它就会再次失败。就像这本XML开发者指南一样,我很高兴能帮上忙。我将把它作为一个答案写下来,这样对未来的读者会有帮助。请尝试string myXml=XDocument.Load(“G:\\new repo\\setting xmls\\settings.xml”)。ToString()
非常感谢,它工作得很好。但还有一个问题,如果我的xml在一些标记中只有一个引号,它就会再次失败。就像这本XML开发者指南一样,我很高兴能帮上忙。我会把它作为一个答案写下来,这样对未来的读者有帮助。小鲍比桌子@UweKeim想解释一下是的,有这个问题,如果我们在xml中有一个单引号,它可能会假设我们的sql查询已经结束。您能解释一下如何避免这种情况吗?您能提供一个XML文档的小片段吗@UweKeim想解释一下是的,有这个问题,如果我们在xml中有一个单引号,它可能会假设我们的sql查询已经结束。你能解释一下如何避免这种情况吗?你能提供一个XML文档的小片段吗