0

我使用以下代码从数据库表中获取列数据当我在调试模式下检查时,我看到我在每次迭代中都获得了正确的表名,但是对于所有表,我获得了相同的属性,这些属性是第一个表属性

我在这里缺少什么?

    foreach (System.Data.DataRow row in schema.Rows)
        {

        currentTableName = row["TABLE_NAME"].ToString();
        currentTableName = currentTableName = currentTableName.Replace(" ", "");
        currentTableName = currentTableName.Replace("[", "");
        currentTableName = currentTableName.Replace("]", "");

        command.CommandText = selectQuery.Replace("@tableName", row["TABLE_NAME"].ToString());
        ad.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString());

        foreach (DataColumn dc in ds.Tables[0].Columns)
            {
            var typeName = dc.DataType.Name;
            var propName = dc.ColumnName.Replace(dc.ColumnName[0].ToString(), dc.ColumnName[0].ToString().ToLower());
            propName = propName.Replace(" ", "");


            }
4

1 回答 1

0

问题:您总是使用以下语句使用同一张表(第一个表):

 foreach (DataColumn dc in ds.Tables[0].Columns)

在上面的语句中Tables[0]总是引用第一个表DataSet

解决方案 1: 您必须将索引值从更改0为 current table index

您可以为每次迭代保留一个index变量increment

尝试这个:

           int index=0;

           foreach (System.Data.DataRow row in schema.Rows)
            {        
            currentTableName = row["TABLE_NAME"].ToString();
            currentTableName = currentTableName = currentTableName.Replace(" ", "");
            currentTableName = currentTableName.Replace("[", "");
            currentTableName = currentTableName.Replace("]", "");

            command.CommandText = selectQuery.Replace("@tableName", row["TABLE_NAME"].ToString());
            ad.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString());

            foreach (DataColumn dc in ds.Tables[index].Columns)
            {
              var typeName = dc.DataType.Name;
              var propName = dc.ColumnName.Replace(dc.ColumnName[0].ToString(), dc.ColumnName[0].ToString().ToLower());
              propName = propName.Replace(" ", "");           
             }
             index++;
            }

解决方案2: 您可以提供新的TableName for-each迭代

尝试这个:

        foreach (System.Data.DataRow row in schema.Rows)
        {

        currentTableName = row["TABLE_NAME"].ToString();
        currentTableName = currentTableName = currentTableName.Replace(" ", "");
        currentTableName = currentTableName.Replace("[", "");
        currentTableName = currentTableName.Replace("]", "");

        command.CommandText = selectQuery.Replace("@tableName", row["TABLE_NAME"].ToString());
        ad.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString());

        foreach (DataColumn dc in ds.Tables[row["TABLE_NAME"].ToString()].Columns)
            {
            var typeName = dc.DataType.Name;
            var propName = dc.ColumnName.Replace(dc.ColumnName[0].ToString(), dc.ColumnName[0].ToString().ToLower());
            propName = propName.Replace(" ", "");
           }

            }
于 2013-12-05T14:47:41.410 回答