簡體   English   中英

插入 xml postgres c#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM