【问题标题】:how to build SQL select query如何构建 SQL 选择查询
【发布时间】: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>

【问题讨论】:

    标签: c# sql xml


    【解决方案1】:

    尝试在循环中构建您的字符串,并将每一列一一添加到您的 SELECT 语句中,就像这样

       Dim selectString As String = "SELECT " 
    
       For Each dd As XElement In tableElement.Elements("COLUMNS").Elements("COLUMN")
                columnName = dd.Element("COLUMNNAME")
                columnNameDic = dd.Element("COLUMNNAMEDIC")
                columnStatement = columnName.Value.ToString() & " AS " & columnNameDic.Value.ToString() & ", "
                // add each columnStatement to your SELECT ... 
                selectString = selectString & columnStatement
       Next
       // cut the last ", "
       selectString = selectString . Substring(0, selectString . Length-1);
    
       // and your FROM 
       selectString = selectString & " FROM " & tableName.Value.ToString()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-17
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 2012-08-12
      相关资源
      最近更新 更多