簡體   English   中英

將XML作為字符串插入SQL列

[英]Insert XML as string into SQL column

我有一個C#網站,我需要能夠將XML作為字符串直接從表單字段直接插入數據庫列中。 我不想從XML中提取值,我只想按原樣插入XML作為字符串。

當前,這導致我的代碼阻塞。

碼:

objParameter.Add(new SqlParameter("@Description", txtDesc.Text.Trim()));

表單字段中的文本:

<note>
<to>Me</to>
<from>You</from>
<heading>Reminder</heading>
<body>Don't forget to buy milk.</body>
</note>

您首先必須將參數添加到命令中,然后再設置以下代碼所示的值

SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add("@Description", typeof(string));

您正在使用的數據庫中很可能存在xml數據類型(sql server,mysql,postgres,oracle)。 我意識到您發布了您不想從xml提取數據的信息,但是在將來,能夠在數據庫層提取數據可能很有趣。 只是一個想法。

我如何理解您需要在數據庫列中將xml數據作為字符串插入。 我寫以下示例:

// xmlData from form
string xmlData = "<note> <to>Me</to> <from>You</from> <heading>Reminder</heading> <body>Don\'t forget to buy milk.</body> </note>";

// this replace is necessary because we need two apostrophe ('') to avoid sql syntax error.
// Also is necessary to filter xml data for SQL Injection
string filteredXmlData = xmlData.Replace("'", "''"); 

string CS= @"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\TestProjects\Database.mdf;Integrated Security=True";
SqlConnection sqlCon= new SqlConnection(CS);
SqlCommand cmd = new SqlCommand("INSERT INTO MyTable (MyCol) values (@paramValue)", sqlCon);
cmd.Parameters.Add(new SqlParameter("@paramValue", filteredXmlData));

sqlCon.Open();
int rowsAffected = cmd.ExecuteNonQuery();
sqlCon.Close();

這是我對正在發生的事情的猜測。 可能是Asp.Net請求驗證不允許您發布xml,因為它認為它很危險。 您可以禁用驗證,但不應禁用。 您可以做幾件事,最好是html編碼:

string theXml = "";
if(txtDesc.Text != null)
{
    theXml = System.Net.WebUtility.HtmlEncode(txtDesc.Text.Trim());
    objParameter.Add(new SqlParameter("@Description", theXml));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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