Connector / NETを使用した連想配列/ハッシュ/ハッシュテーブル
質問
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;);
これが役立つことを願って