• ベストアンサー

パラメータ

Cmd.commandtext="select * from stb where id =?" コマンドテキスト以外でパラメータを使用することが できますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> パラメータはCmd.CommandTextでしか > 使用できないのでしょうか? そういうことになります。 で、そもそもの質問文にある SQL文ですが、これはあまり意味がありません。 そこまで SQL文を動的に組み立てるのであればパラメータである "?" を使う意味がありません。 MySQL は使ったことがないのですが、 "SELECT * FROM stb WHERE id=?" という SQL文をあらかじめストアドプロシージャ(MySQL ではなんて呼ぶんでしょうかね)で DB 側に作っておいて、そいつに何らかの名前をつけておく。(例えば myQuerry01) それを Command オブジェクトで操作する際に Cmd.CommandText="myQuerry01" というように、CommandText プロパティにはストアドプロシージャの名前を入れてあげる。 #そもそも MySQL を前提に回答していないので、 #私が言ってる事がそのまんま MySQL で使えないかもしれません。

sea_clear
質問者

お礼

回答ありがとうございました。

その他の回答 (1)

回答No.1

DB に何を使っているのかぐらい書きましょうよ。 Access の MDB ファイルを使っているのであれば、パラメータクエリを MDB の方で持っておくことができます。 結局は Command オブジェクトを使う事になりますが、Command オブジェクトの Parameters プロパティに Parameter オブジェクトを Append して使います。 手元に Access が無いので記憶だけで書きます。 #ADO を参照設定できない環境でしたら適宜コードを変更してください。 Dim Cmd As New ADODB.Command Cmd.CommandText = "パラメータクエリ名" Cmd.CommandType = adCmdStoredProc Cmd.ActiveConnection = objConn Dim param As ADODB.Parameter Set param = Cmd.CreateParameter("パラメータ名1", adInteger, adParamInput) param.Value = 検索する値 Cmd.Parameters.Append param Set param = Cmd.CreateParameter("パラメータ名2", adVarWChar, adParamInput) param.Value = 検索する値 Cmd.Parameters.Append param みたいな。 これなら名前付きパラメータが使えたかも。 CreateParameter の第2引数はパラメータの型ですので、適宜変更してください。 また、参照設定できない環境でしたら型の定数ではなく、お使いのドライバに合わせて数値化させてください。

sea_clear
質問者

補足

回答ありがとうございます。 MYSQLを使用しています。 パラメータはCmd.CommandTextでしか 使用できないのでしょうか?

関連するQ&A

  • ACCESSでパススルークエリにパラメータを使用したい

    毎度お世話になっております。 WindowsXP、Access2003、SQLServer2000を使用しております。 ADOでSQLServerからデータを抽出したいのですが、 パラメータを使用したいと考えております。  SELECT CODE FROM テーブル1  WHERE CODE = ? とし  adoCmd.CommandTimeout = 0  With adoCmd   .CommandText = strSQL   .CommandType = adCmdUnknown   .Prepared = False   .Parameters.Refresh  End With  adoCmd.Parameters(0).Value = InputBox(Trim(strBuf))  Set adoSet = adoCmd.Execute とすることで動作しました。 しかしSQL文を下記に変更したところエラーになりました。  SELECT t1.CODE FROM  (SELECT CODE FROM テーブル1 WHERE CODE = ? ) as t1  LEFT JOIN  (SELECT CODE FROM テーブル2 WHERE CODE = ? ) as t2  ON t1.CODE = t2.CODE のようにすると、  .Parameters.Refresh の部分で 実行時エラー -21474672595(80004005) 構文エラーまたはアクセス違反です。 となってしまいました。 2つの?の内、片方を定数に、片方を?にしてもエラーになりました。 ?を両方とも定数にすれば実行できました。 JOIN句がある場合に?を使ってはいけないのでしょうか。 何がエラーの原因かわからない状態です。 ご教授お願いいたします。

  • プロシージャーに動的にパラメータを与えたい

    VB.netからプロシージャーを呼び出してます。 SQLで、inの中などで、動的にパラメータを与えたいです。 Select * from TableX where koumoku1 in (1,2,3,5,10) 例えば上の1,2,3,5,10 をパラメータとして外部から与えたいのですが、 プロシージャー側の実装としては、どのような方法があるのでしょうか? パラメータの与え方は、 x = "1,2,3,5,10" のように1つの文字列でも良いし x[0]=1,x[1]=2,x[2]=3,x[3]=5,x[4]=10 のように配列みたいな形でも良いです。 よろしくお願い致します。

  • ADOでパラメタクエリを実行する方法で混乱してます。

    VBからACCESSのクエリを実行したいのですが、 うまくいきません。 1:cmd.Properties("Jet OLEDB:Stored Query") = True←?? 2:cmd.CommandText = "qryKokyaku_UPD"←クエリをセット 3:cmd.Parameters(0).Value = txt.Text←パラメタセット 4:cmd.Execute (cmdはADODB.COMMANDオブジェクトです) 上記のコードでクエリを実行できますが、1行目の 意味が全然分かりません。1行目を除くと、パラメタをセットする(2行目)でエラーがでます。(SQLステートメントが正しくありません)なぜか分かるかた居られましたら、アドバイスお願いします! 分からないまま使用するのはいやなので現在は 1:cmd.CommandText = "qryKokyaku_UPD"←クエリをセット 2:cmd.Execute ,Array(パラメタ1,パラメタ2) という感じで作っています。 しかし、この方法では更新クエリを実行しても、更新したり、しなかったり、(ほとんど更新してくれない)です。 ですが、Executeはエラーなく通ります。 ADD、デリート等のクエリは問題ないのですが。 現在の状況はこんな感じです。 『cmd.Properties("Jet OLEDB:Stored Query") = True』 が何を意味しているのか理解できれば、無事解決です! アドバイスよろしくお願いします。 かなり低レベルな質問かもしれませんが。

  • SQLファイルでのパラメータ指定の方法

    いつもお世話になっております。 以下のようなスクリプトを含むSQLファイルで「1234」を何回も記述したくないので、スクリプト上部で1回パラメータ指定する書き方をご教授願います。実行はSQLServerのクエリアナライザで行いたいです。 SELECT * FROM 顧客 WHERE 会社CD=1234; SELECT * FROM 商品 WHERE 会社CD=1234; よろしくお願いします。

  • データリーダーからのデータ読み出し方法(VB)

    お世話になってます。 先日データコネクションを質問しその後うまくいっているように見えたのですが、表記でまた躓いています。 コードは Dim cn As New OleDb.OleDbConnection Dim cmd As New OleDb.OleDbCommand Dim dr As OleDb.OleDbDataReader 'コマンドのコネクション設定 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB\Report.mdb" 'コネクションを開く cn.Open() 'コマンドの定義 cmd.CommandText = "SELECT password FROM T_Staff WHERE Staff_ID = '" & txtUserID.Text & "'" 'データリーダーからのデータの読み出し dr = cmd.ExecuteReader() ************************************************** 最後の行で ExecuteReader: Connection プロパティは初期化されていません。 と言うエラーメッセージが出ます。 少し検索してみましたがよくわかりません。 これって結局接続できていないのでしょうか? 初期化されていなというのはどういう状態のことなんでしょう? よろしくお願いいたします。

  • DataAdapter使用時のパラメータ設定について

    SQL文に@hogeのようにパラメータを指定して DataAdapterのFillを実行させようとしているのですが エラーでスカラ変数@hogeを宣言してくださいと出ます。 何かご存知の方が居ましたらご教授お願いいたします ソースは簡単に書くと '■SELECT文の設定 Command.CommandText = "SELECT 社員名 FROM 社員マスタ WHERE 社員番号 = @hoge" Command.Parameters.Add("@hoge", Data.SqlDbType.Int) Command.Parameters.Item("@hoge").Value = 10 '■DataAdapterのインスタンス生成 DataAdapter = New SqlClient.SqlDataAdapter(Command.CommandText, Connection) '■SQL実行 Adapter.Fill(dsSELECT)

  • ASP C#

    単純にデータベースから取得した物をフォームのTEXT_BOXに表示させたいのですがやり方がわかりません。 グリッドビューに結果をそのままバインドするのはわかるのですが。。。 select 品名 from 商品テーブル where ID = 3 など、結果が必ず1件のものです SqlConnection cn = new SqlConnection(@"Server=*****;Database=*****;User ID=***; Password=***;"); SqlCommand cmd = new SqlCommand("select title from mst_table where id = 1", cn); cn.Open(); このあと text_box.text = 結果; としたいんです。。。

  • VB.NET コマンドの使い回しに問題ありませんか

    VB2008+Access2003でプログラムを組んでいます。 VB2008の経験は2年位です。 MDBテーブルへの削除・更新処理で疑問がわいてきましたので質問いたします。 ご回答よろしくお願いいたします。 MDBへの接続処理は省略しています。    下記のトランザクション処理で正常に削除・更新されますが Disposeしないコマンド(Cmd42)の使い回しに問題はありませんか?    Dim Cn As New OleDb.OleDbConnection Dim RsTran As OleDb.OleDbTransaction Try    RsTran = Cn.BeginTransaction    Me.Cmd42 = Cn.CreateCommand    Me.Cmd42.Transaction = RsTran    Me.Cmd42.CommandText = "DELETE * FROM 売上テーブル " _        & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "    Me.Cmd42.ExecuteNonQuery()    Me.Cmd42.CommandText = "DELETE * FROM 売上サマリーテーブル " _        & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "    Me.Cmd42.ExecuteNonQuery()    Me.Cmd42.CommandText = "DELETE * FROM 請求合計テーブル " _        & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "    Me.Cmd42.ExecuteNonQuery()    Me.Cmd42.CommandText = "UPDATE 見積書テーブル " _        & " SET KousinDay='" & dumy & "' " _        & " Where (MitumoriNo = '" & Insatu_MitumoriNo & "') "    Me.Cmd42.ExecuteNonQuery()    RsTran.Commit()    MessageBox.Show(Me, "削除しました") Catch ex As Exception    RsTran.Rollback()    MessageBox.Show(ex.Message)    Call 終了処理() End Try Me.Cmd42.Dispose() RsTran.Dispose()

  • パラメータを使ってみたい

    はじめまして、こんばんは。 syouhinというテーブルがありそこには商品名や値段や・・・・etcというのがあります。 今までは<a href="1yen-100yen.php">1円~100円</a> SQLは "SELECT * FROM syouhin WHERE price >= 1 AND price <= 100"; という感じで作ってました。 毎回別々にPHPファイルを作っていると膨大な数になると思うのでパラメータを使ってみたいのです。 price.php?low=1&height=100 (1=1円 100=100円)という感じにパラメータをつけたいのですが syouhinテーブルのフィールドはどんな設計をすればいいのか・・・・と思い質問させていただきました。 アドバイスよろしくお願いします

    • ベストアンサー
    • MySQL
  • クエリのパラメータ

    お世話になります。 ASP.netの勉強中です。 クエリのパラメータに関して、わからないことがあり、質問させて頂きます。 SqlDataSourceのクエリでパラメータを指定する場合は"@"を指定すればよいと 言うことを調べたのですが、@を指定してクエリを作成したところパラメータとは 認識されず、文字列となり、パラメータの定義の画面が表示されません。 (クエリは以下のようになります。) SELECT 形状マスタ.* FROM 形状マスタ WHERE ([コード] = @CD) "@CD"を"?"にすると、パラメータの定義画面が表示され、実行した場合も パラメータとして認識されています。 出来れば"@"でパラメータを指定したいので、教えて頂ければ幸いです。 初歩的な質問で申し訳ありませんが、よろしくお願い致します。