【发布时间】:2019-01-29 11:32:24
【问题描述】:
我有解析 xml 文档和填充数据集的代码。
我可以创建简单的 SELECT 查询(即SELECT GRAPHIC_ID AS INDEX FROM GRAPHICS)。所以我需要构建复杂的 SELECT 查询(selectString),比如SELECT GRAPHIC_ID AS INDEX, GRAPIC_NAME AS NAME, etc... FROM GRAPHICS使用“for each”循环或类似的东西。我需要以某种方式添加 GRAPIC_NAME AS NAME 之类的值块,以便为连接构建正确的 SELECT 查询
这是我的填充方法
var connect = new OracleConnection(ConnectionString);
commandBuilder = new OracleCommandBuilder(dataAdapter);
Dictionary<string, string> listBoxDict = new Dictionary<string, string>();
XDocument doc = XDocument.Load(@"D:\TableName_reworked.xml");
foreach (XElement tableElement in doc.Element("TABLES").Elements("TABLE"))
{
tableName = tableElement.Attribute("NAME");
tableNameDic = tableElement.Element("TABLENAMEDIC");
linkField = tableElement.Element("LINKFIELD");
listBoxDict.Add(tableNameDic.Value.ToString(), tableName.Value.ToString());
foreach (XElement columnsElement in tableElement.Elements("COLUMNS").Elements("COLUMN"))
{
columnName = columnsElement.Element("COLUMNNAME");
columnNameDic = columnsElement.Element("COLUMNNAMEDIC");
}
string selectString = "SELECT " + columnName.Value.ToString() + " AS " + columnNameDic.Value.ToString() + " FROM " + tableName.Value.ToString();
dataAdapter.SelectCommand = New OracleCommand(selectString, connect)
connect.CreateCommand()
dataAdapter.Fill(ds, tableName.Value.ToString())
selectString = null;
}
ListBox1.DataSource = new BindingSource(listBoxDict, null);
listbox1.DisplayMember = "Key";
listbox1.ValueMember = "Value";
这就是我的 XML 文件
<?xml version="1.0"?>
<TABLES>
<TABLE NAME ="GRAPHICS">
<TABLENAMEDIC>GRAPHS</TABLENAMEDIC>
<LINKFIELD>GRAPHIC_ID</LINKFIELD>
<COLUMNS>
<COLUMN>
<COLUMNNAME>GRAPHIC_ID</COLUMNNAME>
<COLUMNNAMEDIC>INDEX</COLUMNNAMEDIC>
</COLUMN>
<COLUMN>
<COLUMNNAME>GRAPHIC_NAME</COLUMNNAME>
<COLUMNNAMEDIC>NAME</COLUMNNAMEDIC>
</COLUMN>
</COLUMNS>
</TABLE>
<TABLE NAME ="METHODS">
<TABLENAMEDIC>METHS</TABLENAMEDIC>
<LINKFIELD>GRAPHIC_ID</LINKFIELD>
<COLUMNS>
<COLUMN>
<COLUMNNAME>GRAPHIC_ID</COLUMNNAME>
<COLUMNNAMEDIC>INDEX</COLUMNNAMEDIC>
</COLUMN>
<COLUMN>
<COLUMNNAME>ID</COLUMNNAME>
<COLUMNNAMEDIC>INDEX2</COLUMNNAMEDIC>
</COLUMN>
<COLUMN>
<COLUMNNAME>METHOD</COLUMNNAME>
<COLUMNNAMEDIC>METH NAME</COLUMNNAMEDIC>
</COLUMN>
</COLUMNS>
</TABLE>
</TABLES>
【问题讨论】: