我需要帮助才能将使用XElement的XML元素导入SQL Server。当我运行代码时,MessageBox.Show(element.ToString(), "element.value");
正确地在MessageBox中显示<FIELD fieldName="ID">1234567</FIELD>
和<FIELD fieldName="DateTime">05/02/2018 09:00:28</FIELD>
。我现在可以使用它来上传到SQL Server中的tblMain吗?
基本上它是一个字符串,保存为outlook中.msg正文的输入。这个msg正文将所有文本作为纯文本格式的正文中的XML。
我将字符串输入作为xml文档加载到XmlDocument中。
使用XElement,然后将此输入解析为xml。我创建了一个变量xitems,其中xml Descendants为(“FIELD”),其中我将一个foreach循环作为xitems中的变量元素运行。输出现在显示在MessageBox中。
请问,我正在寻找的是详细的帮助,如何将这个进入SQL Server到一个名为tblMain的表,为简单起见它有两列ID和DateTime?
代码:
for (int i = 1; i < publicFolder.Items.Count; i++)
{
item = (PostItem)publicFolder.Items[i];
if (item != null)
{
//MessageBox.Show(item.Body, "Body");
//save the msg body into the string
string input = item.Body;
//load the string input as xml document
XmlDocument doc = new XmlDocument();
doc.LoadXml(input);
XElement xml = XElement.Parse(input);
var xitems = xml.Descendants("FIELD");
foreach (var element in xitems)
{
MessageBox.Show(element.ToString(), "element.value");
}
////Create new instance of SQL Connection
//SqlConnection conn = new SqlConnection();
xml文件是:https://imgur.com/a/epCLd22
此SQL代码可以指导您如何解决您的任务:
DECLARE @ColNamesCommaSeparated NVARCHAR(MAX)
DECLARE @ValuesCommaSeparated NVARCHAR(MAX)
DECLARE @xml XML
SET @xml = '
<ROOT>
<FIELD fieldName="ID">1234567</FIELD>
<FIELD fieldName="DateTime">05/02/2018 09:00:28</FIELD>
</ROOT>
'
;WITH Result AS
(
SELECT
T.n.value('@fieldName','VARCHAR(100)') AS ColName,
T.n.value('.','VARCHAR(100)') AS Val
FROM @xml.nodes('/ROOT/*') T(n)
)
SELECT @ColNamesCommaSeparated =
STUFF(
(SELECT ', ' + ColName
FROM Result
FOR XML PATH ('')), 1, 1, ''),
@ValuesCommaSeparated =
STUFF(
(SELECT ', ' + '''' + Val + ''''
FROM Result
FOR XML PATH ('')), 1, 1, '')
DECLARE @sqlCommand NVARCHAR(MAX)
SET @sqlCommand = 'INSERT INTO tblMain (' + @ColNamesCommaSeparated + ') VALUES (' + @ValuesCommaSeparated + ')'
EXEC(@sqlCommand)
因此,您可以创建一个接受xml作为传递参数的存储过程。然后在c#代码中执行此sp。