我有一个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>
答案 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));
}