現在、私はこれをやっています...
object s = new object();
s = mydatarow["mycolumn"];
私がやりたいことは...
DataRow r = null;
r = mydatarow["mycolumn"];
オブジェクトからDataRowに変換できないというエラーが表示されます。
これを行うより良い方法はありますか?
3 つのものがあります... DataTable (複数の行)、TABLE のデータ ROW (複数のフィールド/列)、および個々の列セル自体です。
DataTable oTbl = ResultSetFromYourQuery();
DataRow oDR = oTbl.Rows[0]; // Rows[0] is first row in a result table (zero-based)
String ColumnValue = oDR["YourColumnName"];
あなたは何か間違ったことをしているように見えます。
DataRow r = null;
r = mydatarow["mycolumn"];
mydatarow は DataRow そのものです。特定の列を参照すると、テーブルの「セル」が取得されます。(DataSet は基本的にゆるく型付けされているため、型オブジェクトがあります) しかし、セルを DataRow に割り当てようとします。
とった?
これを試すことができます:
DataRow r = null;
r = (DataRow) mydatarow["mycolumn"]; //*
これが機能する可能性は低いですが、理論的には可能です。通常、このような問題が発生した場合は、ブレークポイント ( を追加した場所) に固執し、 を//*
監視mydatarow["mycolumn"]
して、Visual Studio に実際の型を教えてもらいます (とりわけ、決定する必要があること)。
あなたが現在していることは...
object s = new object();
s = mydatarow["mycolumn"];
最初の行で新しいオブジェクトが作成され、2 行目でそのオブジェクトが破棄され、DataRow の "mycolumn" 列の値に置き換えられるため、これはお勧めできません。これは、正当な理由もなくガベージ コレクターの余分な作業を作成することを除けば、それほど害はありません。その代わりに、これを行う必要があります。
object s = mydatarow["mycolumn"];
ただし、「mycolumn」に文字列値が含まれていることがわかっている場合は、代わりに次のようにすることができます。
string s = (string)mydatarow["mycolumn"];
同様に、「mycolumn」が整数列の場合...
int x = (int)mydatarow["mycolumn"];
どのような状況でも、次のことを行うべきではありません。これはまったく意味がなく、フレームワークは、DataRow の "mycolumn" 値が実際には別の DataRow ではないことを伝えるのに十分なほど優れているためです。
DataRow r = null;
r = mydatarow["mycolumn"];