- - PR -
テーブルのデータを取得する
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-26 14:54
もともと、
NpgsqlCommand command = CreateNewCommand(sql.ToString()) で、コネクションとコマンドを結んで発行していたのですが、 別クラスで、このコードを利用したいので、 コードの一番上のusingに、 using AAANetCommon.DB.Npgsql; using Npgsql; using NpgsqlTypes; と、関係ありそうなコードを書いたものの、 CreateNewCommand が使えません。 定義には、 /// <summary> /// 新しいNpgsqlCommandを作成し返します。 /// </summary> /// <param name="sql">SQL</param> /// <returns>NpgsqlCommand</returns> protected NpgsqlCommand CreateNewCommand(string sql) { NpgsqlCommand command = CreateNewCommand(); command.CommandText = sql; return command; } と書いてあるのですが、 ここからなにかコネクションにつながるものはあるのでしょうか? 本当に不躾な身で申し訳ございませんが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-11-26 15:03
引数が1つも無い CreateNewCommand() メソッド がどこかに定義してありませんか? | ||||||||
|
投稿日時: 2008-11-26 15:07
提示されたコードの範囲ではNpgsqlConnectionにつながる記述は確認できません。 もしかしたら、
のCreateNewCommandメソッドの中で行っているのかもしれませんが。 ところで、「使えません」とはどういった状況でしょうか。 コンパイルエラーが発生しているのならば、そのエラー内容を提示していただければ、もう少し詳しく分かるかもしれません。 _________________ まさるblog | ||||||||
|
投稿日時: 2008-11-26 15:13
みなさん、ご返答ありがとうございます。
CreateNewCommand() の定義は、 「 /// <summary> /// Npgsqlを基にしたテーブル単位のデータ管理。 /// </summary> public abstract class NpgsqlDataAccessor : DataAccessor { /// <summary> /// コンストラクタ。 /// </summary> /// <param name="connectionManager">データベース接続管理</param> protected NpgsqlDataAccessor(NpgsqlConnectionManager connectionManager) : base(connectionManager) { } /// <summary> /// 新しいNpgsqlCommandを作成し返します。 /// </summary> /// <returns>NpgsqlCommand</returns> protected NpgsqlCommand CreateNewCommand() { NpgsqlCommand command = new NpgsqlCommand(); NpgsqlConnectionManager connectionManager = (NpgsqlConnectionManager) base.connectionManager; command.Connection = connectionManager.Connection; if (connectionManager.Transaction != null) { command.Transaction = connectionManager.Transaction; } return command; } 」 です。 エラーには、 「 名前 'CreateNewCommand' は現在のコンテキスト内に存在しません。 」 と書かれています。 | ||||||||
|
投稿日時: 2008-11-26 15:19
CreateNewCommand() に書いてある通り
さきほど command.Connection = connectionManager; としてエラーになったところを command.Connection = connectionManager.Connection; にすれば動くんじゃないでしょうか。 でもその CreateNewCommand() では トランザクションも設定しているようですが。 [ メッセージ編集済み 編集者: King 編集日時 2008-11-26 15:20 ] | ||||||||
|
投稿日時: 2008-11-26 15:25
Kingさんのご教授通り、
NpgsqlCommand command = connectionManager.Connection; と書いたところ、 「 型 'Npgsql.NpgsqlConnection' を型 'Npgsql.NpgsqlCommand' に暗黙的に変換できません。 」 と言われました。 | ||||||||
|
投稿日時: 2008-11-26 15:28
ではなく
では? _________________ Nakamura Blog | ||||||||
|
投稿日時: 2008-11-26 15:32
まず、Kingさんが指摘した通りのコードになってないので、もう一度確認してください。
その上で、今回のコードはNpgsqlDataAccessorクラスの派生クラスに書くべきではないかと推測されます(あくまで"推測"です)が、そのあたりはいかがですか? こう考えた理由は、CreateNewCommandメソッドがNpgsqlDataAccessorクラスに定義してあるため、その派生クラスからでないと呼び出せないからです。 以上を踏まえ、クラス設計も含めて今一度確認してみてください。 _________________ まさるblog |