Connector / NETを使用した連想配列/ハッシュ/ハッシュテーブル

StackOverflow https://stackoverflow.com/questions/1443557

  •  22-07-2019
  •  | 
  •  

質問

Hey Guys、asp.NETおよびc#を使用して、MySQLのコネクタ/ NETプラグインを使用してMySQL dbに接続しています(驚くことはありません!)

それはうまく動作し、接続、クエリなどを実行できますが、Hashtableまたは同様の結果を返すことは可能ですか?同じテーブルで記述を実行して保存し、列名を取得し、それらの値を使用して毎回ハッシュを作成します。

ありがとう、

Psy

役に立ちましたか?

解決

(C#で再実装されたものに対して)C#にラップされていると想定されるMySQL C / C ++コネクタは、結果を含む2次元配列を返します。これは列と行のデータのみであり、列名ではありません。また、APIは mysql_fetch_field_direct()を介してフィールド(列名)値を返します。これは、クエリの結果を取得した後の別の関数呼び出しです。これも2次元配列です。コネクター自体には、2つの個別の結果(列名+列/行データ)をハッシュテーブルにマージするためのAPIは含まれていません。

列名を取得するための2番目のクエリを作成する代わりに、必要なことは、値の割り当てを進めながら列ごとに mysql_fetch_field_direct()を呼び出すだけです。これにより、その列/行に含まれるデータとともにフィールド名が表示されます。この時点で、ハッシュテーブルなどにデータを保存するなど、そのデータの配置方法は開発者次第です

ヘルパー関数をクエリ実行のラッパーとして使用し、列名をキーとしてバイナリツリーに各行を格納し、必要な処理を行うためにツリーのリンクリストを返します。

他のヒント

.netでは、データテーブルとデータセットのみを取得し、データテーブルはデータ行から作成され、それらはハッシュテーブルに非常によく似ており、ほとんどの場合、それらを使用してタスクを達成できますが、ハッシュテーブルが必要な場合はこれを使用できますコード

public static Hashtable convertDataRowToHashTable(DataRow dr)
{
    if (dr == null)
    {
        return null;
    }

    Hashtable ret = new Hashtable(dr.Table.Columns.Count);

    for (int iColNr = 0; iColNr < dr.Table.Columns.Count; iColNr++)
    {
        ret[dr.Table.Columns[iColNr].ColumnName] = dr[iColNr];
    }
    return ret;
}

他の方向(dastrowへの高速テーブル)はそれほど簡単ではありません。datarowにはパブリックコンストラクターがないため(設計上)、newRow = myDataTable.NewRow()を呼び出す必要があります。行の新しいインスタンスを取得し、ハッシュテーブルとほとんど同じように行を操作することができます

newRow["column1"]="some value";

ただし、ハッシュテーブルに新しい列が必要な場合は、データ行ではなくデータテーブルに列を追加する必要がありますmyTable.Columns.Add(&quot; name&quot ;,&quot; type&quot;);

これが役立つことを願って

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top