トップ回答者
VB 6.0からVS 2008(VB.NET)へ

質問
-
質問がございます。
1.
RDO(Remote Data Objects)を使ってデータベースにアクセスしますが、ADO.NETへ移行したいです。
ADO.NETでは、レコードセットの読み込み、メモリーリーク解消などが異なるみたいですが方法がわかりません。
例えば、現在、RDOコードで使用している下記のような宣言は、どのように変更していけばいいでしょうか?
サンプルコードはございませんか?
また、コンバージョンツール、サイト情報ございましたら教えていただけませんか?Public Conn As RDO.rdoConnection
Public en As RDO.rdoEnvironment
en = RDOrdoEngine_definst.rdoEnvironments(0)2.
VB 6.0、VB.NETで変数宣言で、数値型の指定がないのは、整数、文字列などどのようなタイプとしてコンパイラーは
認識しますか?3.
特定のWarningコードを、ソース内で表示しないようにしたのですが構文はございますか?宜しくお願い致します。
回答
-
1.についてのみですが・・・
rdoEnvironmentはもう使用しません。ADO.NETに関しては、以下は古い記事ですが現在でも十分に通用します。VB6のADOからの移行に関しても触れられていますので、逆に参考になるかもしれません。
ADO.NET の使用
http://msdn.microsoft.com/ja-jp/library/aa302325.aspx当時と違い、現在ではusing句を使い、自動的にコネクションをクローズする仕組みがあり、こちらを使う方が良いでしょう。以下を参考にしてみて下さい。
DataReader によるデータの取得 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/haa3afyz.aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月1日 2:51
-
2. についてです。
宣言時の型指定を省略すると、VB6 は Variant 型、VB.NET は Object 型になります。
VB 6.0 ユーザーのための VB .NET 移行ガイド - すべてがオブジェクト型
http://msdn.microsoft.com/ja-jp/library/dd297709.aspx
3. は今一つやりたいことが見えないのですが...。
(「特定の Warning コードを、ソース内で表示」というのが一体どういう状況なのかが分かりません。)- 回答としてマーク 山本春海 2011年7月1日 2:51
-
3. について、もしかするとこういう事をやりたいのかも、と思う URL を添付します。
vb.net - How to disable warnings in Visual Studio for a Visual Basic Web Deployment Project - Stack Overflow
http://stackoverflow.com/questions/450632/how-to-disable-warnings-in-visual-studio-for-a-visual-basic-web-deployment-projec
個人的には、Warning もいちいち確認して対処すべきとは思いますが。- 回答としてマーク 山本春海 2011年7月1日 2:51
-
> 宣言時の型指定を省略すると、VB6 は Variant 型、VB.NET は Object 型になります。
VB.net では Option Infer が on/off で異なります。Option Infer Off では、すべて Object 型になりますが、Option Infer On の場合はコンパイラによって型推論が実施され、推論された型で宣言されます。
Dim a = 1 ' 1 は System.Int32 なので a は Integer 型 Dim b = "foo" ' "foo" は System.String なので b は String 型
- 回答としてマーク 山本春海 2011年7月1日 2:51
-
> 宣言時の型指定を省略すると、VB6 は Variant 型、VB.NET は Object 型になります。
VB.net では Option Infer が on/off で異なります。Option Infer Off では、すべて Object 型になりますが、Option Infer On の場合はコンパイラによって型推論が実施され、推論された型で宣言されます。
Dim a = 1 ' 1 は System.Int32 なので a は Integer 型 Dim b = "foo" ' "foo" は System.String なので b は String 型
型推論は、宣言時に初期化をした場合に限られるのでご注意ください。
VB6 から移行する場合だと、宣言時に初期化なんてやっていませんので。- 回答としてマーク 山本春海 2011年7月1日 2:51
-
1.について。
(1)データアダプタの作成のコードになっておらず、すぐ上のselect用コマンド・オブジェクトの作成と同じコードです。転記ミスでしょうか?
(2)全行返すのあれば、dt.Select()になります。
DataTable.Select メソッド
http://msdn.microsoft.com/ja-jp/library/system.data.datatable.select(v=vs.80).aspx2.について。
ADO.NETとRDOは全くの別物です。ADO.NETにおいて、RDO関連のメソッド等は全て使うことができません。
3.について。
VB6からVB.NETですよね? あまり詳しくないのですが、フリーとなると「Visual Basic .NET アップグレード ウィザード」があるようです。
Visual Basic 6.0 と同じコンピュータに Visual Basic .NET または Visual Basic 2005 をインストールしてプロジェクトをアップグレードする
http://207.46.225.250/kb/311324/jaアップグレードウィザードの利用
http://msdn.microsoft.com/ja-jp/library/dd297684.aspx上記は以前のVisual Studioについて書かれたものですが、現在のVisual Studioでどうなっているのかはわかりません、ごめんなさい。ただ、あまり過度な期待を持たない方がよさそうです。
ちなみに有料となると以下が参考になります。ケーススタディ: 大きなVB6アプリケーションの.NETへの移行
http://www.infoq.com/jp/news/2009/12/Migrating-VB6-to-.NET
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月1日 2:52
-
1.について。
テーブル名なので適当な名前でかまいませんが、一般的には接続DB名にはしません。
2.について。
手元にRDOの資料が無く、ネットを探してみたのですが、RDOのリファレンスを見つけることができませんでした・・・・
RDO.PromptConstants.rdDriverComplete はどういう意味なのでしょうか? 意味がわかれば対応するADO.NETを示せると思います。
3.について。
DB2は使ったことが無いのですが、DB2 .NET Data Provider を使用するようですね。ちなみにSystem.Data.SqlClientは、.NET Framework Data Provider for SQL Serverに属するクラスの名前空間になります。つまり、SQL Server用です。
(参考)
DB2 .NET Data Provider
http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp?topic=/com.ibm.db2.udb.dndp.doc/htm/frlrfIBMDataDB2.htm.NET言語からDB2を使用するには?
http://faq.db2watch.com/content/6/57/ja/nete%A8%80e%AA%9E%E3%81%8B%E3%82%89db2%E3%82%92ae%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F.html
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月1日 2:52
-
1. について、RDO と ADO.NET との共存はないでしょう。どちらかに統一するしかないはずです。
ADO.NET に移行するだけのスキルがないのであれば、RDO にとどまるのも一つの選択肢だと思います。
(RDO から ADO.NET に移行したいで始まったスレッドではありますが。)
2. について、ご自身で確認されてはいかがでしょうか?
時間がないので、最小限のワークで考えています。
(中略)
テストができていなのですが、下記コードで>箇所のコメントを頂けないでしょうか?
この発言はちょっとないと思います。
自分の時間は使いたくないけれども、他の人の時間は好きに使っていいと思っているように見えます。
学ぶ手間を惜しむべきではないと思うのですが。- 回答としてマーク 山本春海 2011年7月1日 2:52
すべての返信
-
1.についてのみですが・・・
rdoEnvironmentはもう使用しません。ADO.NETに関しては、以下は古い記事ですが現在でも十分に通用します。VB6のADOからの移行に関しても触れられていますので、逆に参考になるかもしれません。
ADO.NET の使用
http://msdn.microsoft.com/ja-jp/library/aa302325.aspx当時と違い、現在ではusing句を使い、自動的にコネクションをクローズする仕組みがあり、こちらを使う方が良いでしょう。以下を参考にしてみて下さい。
DataReader によるデータの取得 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/haa3afyz.aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月1日 2:51
-
2. についてです。
宣言時の型指定を省略すると、VB6 は Variant 型、VB.NET は Object 型になります。
VB 6.0 ユーザーのための VB .NET 移行ガイド - すべてがオブジェクト型
http://msdn.microsoft.com/ja-jp/library/dd297709.aspx
3. は今一つやりたいことが見えないのですが...。
(「特定の Warning コードを、ソース内で表示」というのが一体どういう状況なのかが分かりません。)- 回答としてマーク 山本春海 2011年7月1日 2:51
-
3. について、もしかするとこういう事をやりたいのかも、と思う URL を添付します。
vb.net - How to disable warnings in Visual Studio for a Visual Basic Web Deployment Project - Stack Overflow
http://stackoverflow.com/questions/450632/how-to-disable-warnings-in-visual-studio-for-a-visual-basic-web-deployment-projec
個人的には、Warning もいちいち確認して対処すべきとは思いますが。- 回答としてマーク 山本春海 2011年7月1日 2:51
-
> 宣言時の型指定を省略すると、VB6 は Variant 型、VB.NET は Object 型になります。
VB.net では Option Infer が on/off で異なります。Option Infer Off では、すべて Object 型になりますが、Option Infer On の場合はコンパイラによって型推論が実施され、推論された型で宣言されます。
Dim a = 1 ' 1 は System.Int32 なので a は Integer 型 Dim b = "foo" ' "foo" は System.String なので b は String 型
- 回答としてマーク 山本春海 2011年7月1日 2:51
-
> 宣言時の型指定を省略すると、VB6 は Variant 型、VB.NET は Object 型になります。
VB.net では Option Infer が on/off で異なります。Option Infer Off では、すべて Object 型になりますが、Option Infer On の場合はコンパイラによって型推論が実施され、推論された型で宣言されます。
Dim a = 1 ' 1 は System.Int32 なので a は Integer 型 Dim b = "foo" ' "foo" は System.String なので b は String 型
型推論は、宣言時に初期化をした場合に限られるのでご注意ください。
VB6 から移行する場合だと、宣言時に初期化なんてやっていませんので。- 回答としてマーク 山本春海 2011年7月1日 2:51
-
ありがとうございました。
追加で質問がございます。1.
VB.NETでSqlCommand、SelectCmdについての質問です。
@ITに下記サンプルがございます。
このインプリメントがうまくいきません。アドバイスをいただけないでしょうか?// select用コマンド・オブジェクトの作成
SqlCommand selectCmd = new SqlCommand();
selectCmd.Connection = conn;
selectCmd.CommandText = selectStr;SqlCommand、selectCmdを変数で定義しなおしたりしているのですがエラーがでます。
error BC30454: 式はメソッドではありません。
error BC30800: メソッドの引数は、かっこで囲む必要があります。また、最後の"selectStr"の箇所に宣言している関数(xxx())をセットしたいのですが、変数に対して
"引数が指定されていません"などのエラーがでます。2.
これに対する、ADO.NETのクラスは何でしょうか?
RDO.ResultsetTypeConstants.rdOpenStatic宜しくお願い致します。
-
とりあえず1.についてですが、書かれているコードはC#です。VB.NETではありません。C#からVB.NETへは、例えば以下で変換できます。
Convert C# to VB.NET
http://www.developerfusion.com/tools/convert/csharp-to-vb/
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
少し調べてみました。2.のRDO.ResultsetTypeConstants.rdOpenStaticについてですが、これって静的カーソルのことですよね?(RDOはあまり詳しくなくて・・・)
であれば、ADO.NETは非接続型ですので、データベースから読み取ったレコードセットをローカルのデータテーブルに保持します。つまり、データベースからselect文で抽出したレコードセットをローカルに持つことになりますので、これがそのまま静的カーソルに該当することになるんじゃないかと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
ありがとうございました。
ADO.NET対応で@ITのサンプルを参照しています。
質問がございます。1.
データアダプタでSQL文の実行したリターンを全て出力したいのですが、まだ、テストできていません。
下記のSelectメソッドの指定は、正しいでしょうか?Imports System.Data
Imports System.Data.SqlClientPublic Class UpdateDataRow
Public Shared Sub Main()
Dim connStr As String = "Server=(local)\NetSDK;" & "Trusted_Connection=yes;" & "database=pubs"
Dim selectStr As String = "SELECT pub_id, pub_name FROM publishers"' 接続用オブジェクトの作成
Dim conn As New SqlConnection()
conn.ConnectionString = connStr' select用コマンド・オブジェクトの作成
Dim selectCmd As New SqlCommand()
selectCmd.Connection = conn
selectCmd.CommandText = selectStr' データアダプタの作成
Dim selectCmd As New SqlCommand()
selectCmd.Connection = conn
selectCmd.CommandText = ConnectExecute(SqlStr, rs, QueryType)
>ConnectExecute(SqlStr, rs, QueryType)でSQLの実行' データセットへの読み込み
Dim ds As New DataSet()
da.Fill(ds, "A_DB")
Dim dt As DataTable = ds.Tables("A_DB")
>"A_DB"は、接続DB名です。'Selectメソッド
Dim targetRows As DataRow()
targetRows = dt.[Select]("A_DB")
>"targetRows = dt.[Select]("A_DB")"は、正しいでしょうか?End Sub
End Class2.
DataSetクラスを使用すると、RDOでの下記メソッドが"System.Data.DataSetのメンバではありません。"と言われます。
-getBOF
-MoveFirst
-Close
-EOF
-rdoColumns対応、ご存知でしらたおしえてください。
3.
Convert C# to VB.NET
http://www.developerfusion.com/tools/convert/csharp-to-vb/>フリーの"Convert VB to VB.NET"もございますか?
-
1.について。
(1)データアダプタの作成のコードになっておらず、すぐ上のselect用コマンド・オブジェクトの作成と同じコードです。転記ミスでしょうか?
(2)全行返すのあれば、dt.Select()になります。
DataTable.Select メソッド
http://msdn.microsoft.com/ja-jp/library/system.data.datatable.select(v=vs.80).aspx2.について。
ADO.NETとRDOは全くの別物です。ADO.NETにおいて、RDO関連のメソッド等は全て使うことができません。
3.について。
VB6からVB.NETですよね? あまり詳しくないのですが、フリーとなると「Visual Basic .NET アップグレード ウィザード」があるようです。
Visual Basic 6.0 と同じコンピュータに Visual Basic .NET または Visual Basic 2005 をインストールしてプロジェクトをアップグレードする
http://207.46.225.250/kb/311324/jaアップグレードウィザードの利用
http://msdn.microsoft.com/ja-jp/library/dd297684.aspx上記は以前のVisual Studioについて書かれたものですが、現在のVisual Studioでどうなっているのかはわかりません、ごめんなさい。ただ、あまり過度な期待を持たない方がよさそうです。
ちなみに有料となると以下が参考になります。ケーススタディ: 大きなVB6アプリケーションの.NETへの移行
http://www.infoq.com/jp/news/2009/12/Migrating-VB6-to-.NET
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月1日 2:52
-
ありがとうございました。
1.
' データセットへの読み込み
Dim ds As New DataSet()
da.Fill(ds, "A_DB")
Dim dt As DataTable = ds.Tables("A_DB")
>確認ですが、"A_DB"は、接続DB名でも宜しいですか?2.
DataSetクラスを使用すると、RDOでの下記メソッドが"System.Data.DataSetのメンバではありません.....対応、ございますか?
-getBOF
-MoveFirst
-Close
-EOF
-MoveLast
-RowCount>ADO.NETとRDOは全くの別物です。ADO.NETにおいて、RDO関連のメソッド等は全て使うことができません。
申し訳ございません。http://msdn.microsoft.com/ja-jp/library/ff495523(SQL.100).aspxなどを見ていても、対応するメソッドが解らないので質問していました。
あと、下記、プロンプト処理で、これに相当するADO.NETのメソットが解りません。
RDO.PromptConstants.rdDriverComplete対応、ご存知でしらたおしえてください。
3.
IBM DB2を使用します。
クラスは、System.Data.Odbcは使用するべきでしょうか?
それとも、これまで使用していたネイティブのSystem.Data.SqlClientを使用していて問題なでしょうか? -
1.について。
テーブル名なので適当な名前でかまいませんが、一般的には接続DB名にはしません。
2.について。
手元にRDOの資料が無く、ネットを探してみたのですが、RDOのリファレンスを見つけることができませんでした・・・・
RDO.PromptConstants.rdDriverComplete はどういう意味なのでしょうか? 意味がわかれば対応するADO.NETを示せると思います。
3.について。
DB2は使ったことが無いのですが、DB2 .NET Data Provider を使用するようですね。ちなみにSystem.Data.SqlClientは、.NET Framework Data Provider for SQL Serverに属するクラスの名前空間になります。つまり、SQL Server用です。
(参考)
DB2 .NET Data Provider
http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp?topic=/com.ibm.db2.udb.dndp.doc/htm/frlrfIBMDataDB2.htm.NET言語からDB2を使用するには?
http://faq.db2watch.com/content/6/57/ja/nete%A8%80e%AA%9E%E3%81%8B%E3%82%89db2%E3%82%92ae%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F.html
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月1日 2:52
-
Hoshinaです
こんにちは古いVB6.0から.NETへの移行は確定済みと考えてよろしいでしょうか?
調査の段階ではなく,移行への実作業を現実に想定していると考えてよいですね。もしそうであれば,現行のプログラムは忘れて,.NETでのデータベース操作方法の基本を新たに調査することを優先した方が良いと思えます。古いソースはまず利用できないと思います。
また,.NETではデータベースの操作方法とそれを画面に表示し,データを操作する方法とが一体になっています。
この基本を外れると大変な事態に遭遇すると思います。
一方,.NETの原則や基本に従えば,かなり楽ができます。Umashikaさんの投稿を見る限りの判断でしかありませんが,
そもそも道の無いところへ頭から突っ込んで行こうとしているように見えてしょうがありません。
私の投稿に悪意は無いつもりです。このように見ている人も中にはいるという,1つの判断材料にしてください。それでは
-
3.
IBM DB2を使用します。
クラスは、System.Data.Odbcは使用するべきでしょうか?
それとも、これまで使用していたネイティブのSystem.Data.SqlClientを使用していて問題なでしょうか?なぜこちらで↓回答を得ているのに、また質問しているのですか?
http://okwave.jp/qa/q6826347.htmlちょっとひどくないですか?
-
ありがとうございました。
追加で質問がございます。
時間がないので、最小限のワークで考えています。1.
仮に移行(VB.NET)ですので、.NETデータ・プロバイダーを使用して、DataSetは使用しないで考えます。
ですので、既存クラスのRDO.rdoResultset(ADO.NETでは、System.Data.DataSet)や
DB接続時のプロンプト、RDO.PromptConstants.rdDriverCompleteは、このまま、残しRDO, ADO.NETの共存になるのでしょうか?2.
テストができていなのですが、下記コードで>箇所のコメントを頂けないでしょうか?
Imports System.Data.SqlClient'接続用オブジェクトの作成
Dim Conn As Object = OpenConnection(Provider, DSN, RDO.PromptConstants.rdDriverComplete, False, "UID=" & USERID & ";" & "PWD=" & PASSWORD & ";")
Dim concon As New SqlConnection(conn)
Dim cmd As New SqlCommand(ConnectExecute(SqlStr, rs, QueryType), concon)'SQL文を実行
concon.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()'実行結果
While dr.Read()
Console.Write("")
>すべてのSQLの結果を、すべて表示したいのですがこれで正しいですか?End While
dr.Close()
concon.Close()宜しくおねがいします。
-
もしそうであれば,現行のプログラムは忘れて,.NETでのデータベース操作方法の基本を新たに調査することを優先した方が良いと思えます。古いソースはまず利用できないと思います。
-
1. について、RDO と ADO.NET との共存はないでしょう。どちらかに統一するしかないはずです。
ADO.NET に移行するだけのスキルがないのであれば、RDO にとどまるのも一つの選択肢だと思います。
(RDO から ADO.NET に移行したいで始まったスレッドではありますが。)
2. について、ご自身で確認されてはいかがでしょうか?
時間がないので、最小限のワークで考えています。
(中略)
テストができていなのですが、下記コードで>箇所のコメントを頂けないでしょうか?
この発言はちょっとないと思います。
自分の時間は使いたくないけれども、他の人の時間は好きに使っていいと思っているように見えます。
学ぶ手間を惜しむべきではないと思うのですが。- 回答としてマーク 山本春海 2011年7月1日 2:52
-
テストができていなのですが、下記コードで>箇所のコメントを頂けないでしょうか?
結論から言えば動かないと思います。理由は、RDOとADO.NETが混在しているからです。#Umashikaさんの方でとりあえずテストしてみて下さい。急がれていることやテスト前により精度を上げたい気持ちはわからなくもないですが、やはりご自分でテストされるといろいろな点に気付きますし、それが結果としてフォーラムでのご質問も的確になって、解決への時間が短縮されると思うのです。解決への時間短縮は良い回答も大事ですが、良い質問も大事なのです。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/