C# 插入到xml postgres c中#
我执行从c#到postgres的插入查询时遇到困难。我同时使用dapper和npgsql 我使用的方法是:C# 插入到xml postgres c中#,c#,postgresql,dapper,C#,Postgresql,Dapper,我执行从c#到postgres的插入查询时遇到困难。我同时使用dapper和npgsql 我使用的方法是: public void InsertQuery(XmlDocument xmlDoc) { var query = "INSERT INTO cars(name, price, xml_file) VALUES(@name, @price, @xmlDoc)"; DynamicParameters dynamicParams =
public void InsertQuery(XmlDocument xmlDoc)
{
var query = "INSERT INTO cars(name, price, xml_file) VALUES(@name, @price, @xmlDoc)";
DynamicParameters dynamicParams = new DynamicParameters();
dynamicParams.Add("@name", "pegot2", DbType.AnsiString, ParameterDirection.Input, 255);
dynamicParams.Add("@price", 15000);
dynamicParams.Add("@xmlDoc", xmlDoc, DbType.Xml,ParameterDirection.Input);
try
{
int res = Connection.Execute(query, dynamicParams);
if (res > 0)
{
Console.WriteLine("row inserted");
}
}
catch (Exception e)
{
Console.WriteLine("Caught exception:\n" + e);
throw;
}
}
我使用的表如下所示:
当我尝试执行查询时,出现以下错误:
System.InvalidCastException: 'Can't write CLR type System.Xml.XmlDocument with handler type TextHandler'
我敢肯定我把语法搞砸了。欢迎任何帮助 我的答案有两种解决方案,但都跳过了这一行:
//<?xml version="1.0" encoding="UTF-8"?>
public void InsertQuery(XmlDocument xmlDoc)
{
var query = "INSERT INTO cars(name, price, xml_file) VALUES(@name, @price, @xmlDoc)";
DynamicParameters dynamicParams = new DynamicParameters();
dynamicParams.Add("@name", "pegot2", DbType.AnsiString, ParameterDirection.Input, 255);
dynamicParams.Add("@price", 15000);
//can use xmlDoc.OuterXml too
dynamicParams.Add("@xmlDoc", XmlToString(xmlDoc), DbType.Xml,ParameterDirection.Input);
try
{
int res = Connection.Execute(query, dynamicParams);
if (res > 0)
{
Console.WriteLine("row inserted");
}
}
catch (Exception e)
{
Console.WriteLine("Caught exception:\n" + e);
throw;
}
}
//.OuterXml also seems to work
public string XmlToString(XmlDocument myxml)
{
StringWriter sw = new StringWriter();
XmlTextWriter tx = new XmlTextWriter(sw);
myxml.WriteTo(tx);
return sw.ToString();
}
//
公共void InsertQuery(XmlDocument xmlDoc)
{
var query=“在汽车(名称、价格、xml_文件)中插入值(@name、@price、@xmlDoc)”;
DynamicParameters DynamicParameters=新的DynamicParameters();
添加(“@name”,“pegot2”,DbType.ansisting,ParameterDirection.Input,255);
添加(“@price”,15000);
//也可以使用xmlDoc.OuterXml
dynamicParams.Add(“@xmlDoc”,XmlToString(xmlDoc),DbType.Xml,ParameterDirection.Input);
尝试
{
int res=Connection.Execute(查询、动态内存);
如果(分辨率>0)
{
控制台写入线(“插入行”);
}
}
捕获(例外e)
{
Console.WriteLine(“捕获的异常:\n”+e);
投
}
}
//.OuterXml似乎也能工作
公共字符串XmlToString(XmlDocument myxml)
{
StringWriter sw=新的StringWriter();
XmlTextWriter tx=新的XmlTextWriter(sw);
myxml.WriteTo(tx);
返回sw.ToString();
}
@Michael Effraimidis:你的答案很好。如果需要xml声明,可以执行以下操作:
公共字符串XmlToString(XmlDocument myxml)
{
var memoryStream=新的memoryStream();
var xmlWriterSettings=new xmlWriterSettings{omitxmlsdeclaration=false};
var xmlWriter=xmlWriter.Create(memoryStream,xmlWriterSettings);
Save(xmlWriter);
返回UTF8Encoding.UTF8.GetString(memoryStream.ToArray());
}
其他属性也可以通过XmlWriterSettings进行控制。请参阅。我不熟悉在postgres中使用xml,但我不希望它知道如何使用XmlDocument之类的.NET类型。您可能需要获取它的OuterXml属性并将其放入数据库中,我想我已经修复了它。我使用公共字符串GetXMLAsString(XmlDocument myxml){StringWriter sw=new-StringWriter();XmlTextWriter tx=new-XmlTextWriter(sw);myxml.WriteTo(tx);return sw.ToString();}来获得正确的字符串。OuterXml似乎也可以正常工作。但是,从xml生成的字符串不包括以下行:“您认为这可能是个问题吗?我不能说这是否会是个问题,这取决于使用xml的内容。