0

次のコードを使用してDBテーブルから列データを取得しますデバッグモードでチェックすると、すべての反復で正しいテーブル名を取得していることがわかりましたが、すべてのテーブルで最初のテーブルプロパティ である同じプロパティを取得します

ここで何が欠けていますか?

    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 に答える