@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

DbCommandへの型変換でエラー

投稿者投稿内容
Furi2
ベテラン
会議室デビュー日: 2004/10/28
投稿数: 74
お住まい・勤務地: N.Hollywood/Agoura Hills
投稿日時: 2007-05-07 13:10
お世話になってます。

新規にVS2005のMobile5.0プロジェクトを作成したのですが、Factoryクラスが使えないということで自前で作ろうかと思ったのですが、Webプロジェクトなどでは普通に使っていた以下のコードがコンパイルエラーとなってしまいます。

DbCommand cmd = new SqlCommand();

エラーメッセージ:Cannot implicitly convert type 'System.Data.SqlClient.SqlCommand' to 'System.Data.Common.DbCommand'

もちろんこれもエラーです。
DbCommand cmd = (DbCommand)(new SqlCommand());

System.DataとSystem.Data.SqlClientアッセンブリの参照はされています。
Compact Framework 2.0もインストールされています。

何が問題であるのか、どなたかご教授いただけませんでしょうか。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-05-07 13:33
Imports 文
Furi2
ベテラン
会議室デビュー日: 2004/10/28
投稿数: 74
お住まい・勤務地: N.Hollywood/Agoura Hills
投稿日時: 2007-05-07 13:39
引用:

ひろれいさんの書き込み (2007-05-07 13:33) より:
Imports 文



以下のNamespaceを参照しています。Namespaceの参照がない場合は「○○が見つかりません」のエラーになるので、understoodとして省略してしまいました。すみません。(Imports文の意味はこれでよかったですよね??)

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-05-07 13:52
引用:

Furi2さんの書き込み (2007-05-07 13:39) より:
引用:

ひろれいさんの書き込み (2007-05-07 13:33) より:
Imports 文



以下のNamespaceを参照しています。Namespaceの参照がない場合は「○○が見つかりません」のエラーになるので、understoodとして省略してしまいました。すみません。(Imports文の意味はこれでよかったですよね??)

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;



C# でしたね。ごめんなさい。

「using System.Data.SqlClient;」を消してみてもダメでしょうか。

#以下、追記。

なんかバカなこと言ってますね>俺
要は、どうして「DbCommand」と「SqlCommand」を混在しているのかってことです。
どっちかに統一すれば済む話だと思います。

[ メッセージ編集済み 編集者: ひろれい 編集日時 2007-05-07 13:58 ]
Furi2
ベテラン
会議室デビュー日: 2004/10/28
投稿数: 74
お住まい・勤務地: N.Hollywood/Agoura Hills
投稿日時: 2007-05-07 13:56
引用:

ひろれいさんの書き込み (2007-05-07 13:52) より:


C# でしたね。ごめんなさい。

「using System.Data.SqlClient;」を消してみてもダメでしょうか。





ありがとうございます。
「using System.Data.SqlClient;」を消すとやはり、「SqlCommandが見つかりません」、と、全てのSqlClient内のクラスを使用している部分でコンパイル・エラーになってしまいます。

[ メッセージ編集済み 編集者: Furi2 編集日時 2007-05-07 13:57 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-05-07 14:15
System.Data.IDbCommand あたりに代入したらどうなります?
モバイルだと何かあるのかな?
_________________
かるあ のメモスニペット
Furi2
ベテラン
会議室デビュー日: 2004/10/28
投稿数: 74
お住まい・勤務地: N.Hollywood/Agoura Hills
投稿日時: 2007-05-07 14:24
引用:

かるあさんの書き込み (2007-05-07 14:15) より:
System.Data.IDbCommand あたりに代入したらどうなります?
モバイルだと何かあるのかな?




ありがとうございます!
ご提案のように、以下のようにしたところ、コンパイル・エラーが消えました。元の方法でなにが駄目なのか疑問は残るのですが。。

IDbCommand icmd = new SqlCommand();
DbCommand cmd = (DbCommand) icmd;


[ メッセージ編集済み 編集者: Furi2 編集日時 2007-05-07 14:25 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-05-07 14:30
引用:

Furi2さんの書き込み (2007-05-07 14:24) より:
コード:
IDbCommand icmd = new SqlCommand();
DbCommand cmd = (DbCommand) icmd;




なぜキャストできないのかは僕もわかりませんが
これ DbCommand に入れる必要ってあるんですか?
インターフェイスのまま処理しちゃっていい気がする。

_________________
かるあ のメモスニペット

スキルアップ/キャリアアップ(JOB@IT)