[英]insert into xml postgres c#
我在執行從 c# 到 postgres 的插入查詢時遇到困難。 我同時使用 dapper 和 npgsql。
我使用的方法是這樣的:
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();
}
@Michael Effraimidis:你的回答很好。 如果您需要 xml 聲明,您可以這樣做:
public string XmlToString(XmlDocument myxml)
{
var memoryStream = new MemoryStream();
var xmlWriterSettings = new XmlWriterSettings { OmitXmlDeclaration = false };
var xmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings);
myxml.Save(xmlWriter);
return UTF8Encoding.UTF8.GetString(memoryStream.ToArray());
}
其他屬性也可以通過 XmlWriterSettings 進行控制。 見這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.