C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C#でのRecordset.GetRows


(過去ログ 136 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■79892 / inTopicNo.1)  C#でのRecordset.GetRows
  
□投稿者/ kys31 (6回)-(2016/05/26(Thu) 19:41:27)

分類:[C#] 

C#で、Recordset.GetRowsし、その結果の二次元配列に対するアクセス方法について質問になります。

環境は以下になります。
Windows10 32bit
VisualStudio2015 Professional
VisualC# 2015

VB6で作成されていたアプリケーションをC#にマイグレーションしています。

VB6時代では、Recordset.GetRowsをVariant型の変数にいれているので、xxxxx(1, 2)のように行列指定したアクセスで
取得した値がとれていたようですが、
c#ではVariant型が存在しないので、何型で受け取れば良いかが分かりません。
コンバートツールでは、object型に変換されていましたが、それではxxxxx(1, 2)でエラーになりました。

object result = null;
Recordset rst = default(Recordset);
int rcnt = rst.RecordCount;

while (!(rst.EOF == true))
{
// 該当レコード抽出
result = rst.GetRows(rcnt);
}

最終的に、"result(2, 3)"のようなアクセスをしたいです。

初心者のため全く分からない状態です。ご教授お願い致します。

引用返信 編集キー/
■79895 / inTopicNo.2)  Re[1]: C#でのRecordset.GetRows
□投稿者/ daive (113回)-(2016/05/26(Thu) 20:26:25)
2016/05/26(Thu) 20:33:22 編集(投稿者)
2016/05/26(Thu) 20:29:00 編集(投稿者)

この質問は、前回の続きですか?それとも?
前回:C#でのDAOの利用
http://bbs.wankuma.com/index.cgi?mode=al2&namber=79852
1.前回の続きでないのであれば、
  どの様なデータから、Recordset を取得しているか
  掲示してください。
2.前回の続きで、MDBや、ACCDBからのデータ取得
  ADO.NETの学習をしてください。
  何も、無理無理DAOを使う事もないかなぁと、
   ADO.NET&ODBC :生き残り、2000年代前半では、先に逝くとも言われていた様子。
   ADO.NET&OLEDB:直ぐではないが、サポ終わり。
                 でも愚図愚図と、生き残かも。
      MS−SQL2014以後では、MS−SQL2012用OLEDBドライバを使う
      ⇒ACCESS2013 でのADP廃止他:FoxProより先に無くなるとおもっていたのになぁ。
       ACCESSでなきゃって云う事に、こだわらないらないなら、
       MS-SQL Server へインポートしてしまう。
   DAOでなければならない処理:いくつかありますが、調べてみてください。
3.初心者は免罪符には成りません。
  お仕事でやっているのであれば、質問者さんは給料貰っているのに、
  掲示板で回答する、無償行為の回答者への報酬は何でしょう?
  
引用返信 編集キー/
■79898 / inTopicNo.3)  Re[1]: C#でのRecordset.GetRows
□投稿者/ 魔界の仮面弁士 (729回)-(2016/05/26(Thu) 22:09:24)
No79892 (kys31 さん) に返信
> VB6で作成されていたアプリケーションをC#にマイグレーションしています。
ADODB とは決別した方が良いと思いますけれどね…。
COM だけにメモリ解放も手間ですし、参照するアセンブリによって解放対象も異なりますし。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/a9ab2a55-6cf1-468a-9dc4-b0d99ff775eb/adodb?forum=vbgeneralja

将来、Entity Framework Core への移行も見据えた上で、
ADO.NET へのマイグレーションをお奨めします。


> c#ではVariant型が存在しないので、
c# (0x63, 0x23) ではなく
C# (0x43, 0x23) が正式名称です。

> Variant型が存在しないので、何型で受け取れば良いかが分かりません。
真っ当にやるなら object、手抜きなら dynamicで。

> コンバートツールでは、object型に変換されていましたが、
配列にキャストしてから使うか、または dynamic で処理しましょう。

> それではxxxxx(1, 2)でエラーになりました。
C# のインデクサ指定は、() ではなく [] ですよ。

> int rcnt = rst.RecordCount;
特定の条件下では、RecordCount プロパティが期待値を返さない可能性がありますので御注意を。
http://www.canalian.com/DenRe/DenRe3-2.html


> while (!(rst.EOF == true))
分かりにくい気がします…。単純に
 while (!rst.EOF)
で良いのでは無いでしょうか。

あるいはせめて、
 while (rst.EOF == false)
とか、譲って
 while (rst.EOF != true)
あたりで。


そもそも、今回のコードで while は必要なのでしょうか。
複数回に分けて GetRows したいわけではなく、
RecordCount の数だけ取得するだけなのですよね?


> 最終的に、"result(2, 3)"のようなアクセスをしたいです。
OleDbDataAdapter の Fill メソッドを通じて、Recordset の内容を
DataSet や DataTable に取り込んでしまう手もあります。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -