当前位置: 首页 > 编程语言 > C#

使用C#将XML导入SQL分享

时间:2023-04-10 22:33:13 C#

C#学习教程:使用C#将XML转换为SQL现在读书,每天工作9小时以上。好的,这是我的问题:我有一个即将完成的WinFormsC#应用程序。在SQL中,我有三个这样的表:CREATETABLE[dbo].[Racuni]([BROJ][varchar](12)NULL,[DATUM][datetime]NULL,[TS][datetime]NULL,[USER_ID][int]NULL,[KASA_ID][varchar](3)NULL,[TOTAL][float]NULL,[STATUS][varchar](1)NULL,[ARH][varchar](max)NULL)ON[PRIMARY]创建表“Rac_Npl”(br_racChar(12),kasa_idChar(3),npl_idInteger,iznosMoney);创建表[dbo].[Stavke]([br_rac][varchar](12)NULL,[kasa_id][char](3)NULL,[art_id][int]NULL,[kol][float]NULL,[mpc][money]NULL,[ompc][money]NULL)我在本地磁盘上有用于导入这三个表的XML文件-XML看起来像这样:同样,我很不好意思以这种方式寻求帮助,但我会尽我所能支持StackOverflow。跨实现不一致地支持多个CDATA元素。例如,您将无法通过XDocument或SelectNodes访问它们。如果您可以更改输入格式,事情会变得更容易。此代码尚未经过测试,也没有错误处理或错误数据检查,但它应该可以帮助您入门。使用XPathDocument/XPathNavigator调查性能并阅读我的内联评论。classXmlCsvImport{publicvoidImportData(stringxmlData,ConnectionStringSettingsconnectionSettings){DbProviderFactoryproviderFactory=DbProviderFactories.GetFactory(connectionSettings.ProviderName);IDbConnection连接=providerFactory.CreateConnection();connection.ConnectionString=connectionSettings.ConnectionString;//TODO:开始事务XmlDocumentdoc=newXmlDocument();doc.LoadXml(xmlData);foreach(XmlNodetableNodeindoc.SelectNodes("/transaction/table")){IDbCommandcommand=CreatCommand(connection,tableNode);foreach(XmlNoderowNodeintableNode.SelectNodes("data/row")){string[]values=GetRowValues(rowNode);if(values.Length!=command.Parameters.Count){//TODO:记录坏行继续;}this.FillCommand(command,values);命令.ExecuteNonQuery();}}//TODO:提交事务}privateIDbCommandCreatCommand(IDbConnectionconnection,XmlNodetableNode){stringtableName=tableNode.Attributes["name"].Value;IDbCommandcommand=connection.CreateCommand();command.Connection=connection;command.CommandType=CommandType.Text;XmlNodeListfieldNodes=tableNode.SelectNodes("fields/field");ListfieldNameList=newList(fieldNodes.Count);foreach(XmlNodefieldNodeintableNode.SelectNodes("fields/field")){stringfieldName=fieldNode.Attributes["name"].Value;intfieldType=Int32.Parse(fieldNode.Attributes["type"].Value);intfieldSize=Int32.Parse(fieldNode.Attributes["size"].Value);IDbDataParameterparam=command.CreateParameter();param.ParameterName=String.Concat("@",fieldNode.Attributes["name"]);param.Size=fieldSize;param.DbType=(DbType)fieldType;//注意:这可能不是那么简单command.Parameters.Add(param);fieldNameList.Add(fieldName);}string[]fieldNames=fieldNameList.ToArray();StringBuildercommandBuilder=newStringBuilder();commandBuilder.AppendFormat("INSERTINTO[{0}](",tableName);stringcolumnNames=String.Join("],[",fieldNames);字符串paramNames=String.Join(",@",fieldNames);command.CommandText=String.Concat("INSERTINTO[",tableName,"]([",columnNames,"])VALUES(@",paramNames,")");返回命令;}privatestring[]GetRowValues(XmlNoderow){Listvalues=newList();foreach(XmlNodechildinrow.ChildNodes){if(child.NodeType==XmlNodeType.Text||child.NodeType==XmlNodeType.CDATA){values.Add(child.Value);}}返回值.ToArray();}privatevoidFillCommand(IDbCommandcommand,string[]values){for(inti=0;i可以使用XPathNavigator对象解析XML,然后使用SqlCommand对象向表中插入数据。代码很多以上是C#学习教程:UsingC#importsXMLintoSQL分享全部内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多包涵更多关注,本文收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载,请注明出处: