我有一个程序可以将数据从XML文件导入到SQL Server表中。当我调试程序时,流程开始创建表时,我收到“ TRANSACTION附近的语法不正确”错误。我的XML的结构为:
<?xml version="1.0" encoding="utf-16"?>
<EXPORT_HEADER xmlns="http://www.sir.com/SFI/Export/GL_Export/20051005"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sir.com/SFI/Export/GL_Export/20051005
GL_EXPORT.xsd" total_transactions="4616" total_accnts="2000">
<TRANSACTION business_type_code="DIRECT" term="NB" />
<TRANSACTION business_type_code="DIRECT" term="NB" />
</EXPORT_HEADER>
但是,当我使用包含实际数据的TRANSACTION标记部分时,我想通过上面显示的语法错误进行提交:
DataSet DS = new DataSet();
DS.ReadXml(XMlFile);
DataTable dt = DS.Tables[1];
if (dt.Columns.Count == 0)
dt.ReadXmlSchema(XMlFile);
dt.ReadXml(XMlFile);
作为检查,我尝试使用EXPORT_HEADER部分,并且成功提交了标题中的数据,并且还创建了表:
DataSet DS = new DataSet();
DS.ReadXml(XMlFile);
DataTable dt = DS.Tables[0];
if (dt.Columns.Count == 0)
dt.ReadXmlSchema(XMlFile);
dt.ReadXml(XMlFile);
这是将XML数据导入到Sql Server表中的操作:
private void btnImport_Click(object sender, EventArgs e)
{
const string XMlFile = @"C:\Users\tshumae\Documents\MyProjects\MyProject\GL_Export_54_201907081053.xml";
// string XMlFile = txtFilePath.Text;
if (File.Exists(XMlFile))
{
// Conversion Xml file to DataTable
DataSet DS = new DataSet();
DS.ReadXml(XMlFile);
DataTable dt = DS.Tables[0];
if (dt.Columns.Count == 0)
dt.ReadXmlSchema(XMlFile);
dt.ReadXml(XMlFile);
// Creating Query for Table Creation
string Query = CreateTableQuery(dt);
SqlConnection con = new SqlConnection(StrCon);
con.Open();
// Deletion of Table if already Exist
SqlCommand cmd = new SqlCommand("IF OBJECT_ID('dbo." + dt.TableName + "', 'U') IS NOT NULL DROP TABLE dbo." + dt.TableName + ";", con);
cmd.ExecuteNonQuery();
// Table Creation
cmd = new SqlCommand(Query, con);
int check = cmd.ExecuteNonQuery();
if (check != 0)
{
// Copy Data from DataTable to Sql Table
using (var bulkCopy = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
{
foreach (DataColumn col in dt.Columns)
{
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
bulkCopy.BulkCopyTimeout = 600;
bulkCopy.DestinationTableName = dt.TableName;
bulkCopy.WriteToServer(dt);
}
MessageBox.Show("Table Created Successfully");
}
con.Close();
}
}
我不确定我的猜测是否正确,但是我认为TRANSACTION标签在结束标签中有一些空格字符。相反,EXPORT HEADER标签在结束标签中没有空格。如果确实如此,有人能指出正确的方向吗?或者文档中还有其他格式不正确的