将XML作为字符串插入SQL列

时间:2015-12-31 13:00:50

标签: c# sql asp.net sql-server xml

我有一个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>

4 个答案:

答案 0 :(得分:0)

首先必须在设置值之前将参数添加到命令中,如下面的代码

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

答案 1 :(得分:0)

您使用的数据库中很可能存在xml数据类型(sql server,mysql,postgres,oracle)。我意识到你发布了你不想从xml中提取数据,但在未来的道路上,能够在数据库层提取数据可能会很有趣。只是一个想法。

答案 2 :(得分:0)

我如何理解您需要在数据库列中将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();

答案 3 :(得分:0)

以下是关于发生了什么的猜测。可能是Asp.Net请求验证不允许您发布xml,因为它认为它是危险的。您可以禁用验证但不应该。你可以做几件事,可能html编码是你最好的选择:

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