• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL パラメーターの表示について)

SQLパラメーターの表示について

このQ&Aのポイント
  • Windows7、VB2010(Windowsフォーム)、SQL Server で開発し、XPと7で画面を動かします。SQLでパラメータを使っており、エラー処理で困っています。
  • SQLのパラメータの内容が表示されない問題について。SQLが「~~~~ WHERE KEN_ID = @KEN_ID」そのままになり、「~~~~  KEN_ID = '01'」等にならない。
  • 別プロジェクトにおいて、SQLパラメータの内容を設定している部分でエラーが発生しています。

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

> ですが、KEN_IDをシングルコーテーションで囲むのを忘れてました; > ありがとうございます それはまずい気がする。。。 SqlParameter クラスの中で、SqlDbType に応じて文字列を必要な形式に 変換してくれるはずだから、SQL の本文にシングルコーテーションを つけると動作が変わってしまいそうに思います。 データにシングルコーテーションを含む場合など、十分にパターンテスト して確認しておきましょう。 #1の方は SQL 文内の(パラメータ)変数と VB.NET の変数を混同している ようです。 #2の方が言うようにデータベースにそのまま渡ってから処理されるので 自力で置き換えるか、むしろ CommandText はそのまま出力して、それとは 別に Command.Parameters コレクションをループで回してパラメータの 値を全部書き出せばいいような気もします。 どちらにしろ、Common.DB という自作クラスを前提に質問されても こちらでは理解できませんので、そのクラスを設計された方に相談して ください。

kapibaraPG
質問者

お礼

ありがとうございます ''はすいません 型変換してくれるのでつい忘れてしまいがちです; パラメータ変数を使えば'がついても正常に動作してくれるので便利ですね command.Parameters.itemの中にパラメータが入っていたので、conを受け取ってcommandに入れて、パラメータを出力する方向で決まりました ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

Common.DBクラスが何をしているのかわかりませんが, パラメータを最終的に処理するのはSQL Serverエンジンになります。 # Sql Profilerで確認すると@KEN_IDがそのままエンジンまで届いていることが確認できます。 このため,@KEN_IDがクライアント側で展開されることはありません。 また,エラー処理中でSql.ToString()を出力していますが, StringBuilderクラスは汎用クラスのため,パラメータを置き換えるような処理は当然ながらありません。 基本的には, ・自力で展開する ・パラメータを別途出力する のどちらかになると思います。私であれば後者を選択します。 ただし,どうもCommon.DBクラスに処理を委譲しているようなので,Common.DBクラスがこのための処理をある程度代行する必要があると思います。

kapibaraPG
質問者

お礼

ありがとうございます。 DBクラスは、コネクションの接続やSQL実行をしている部分です DBクラスのconnectionを受け取り、command内のパラメータを出力する方向で決まりました ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

> sql.Append(" KEN_ID = @KEN_ID") 変数をダブルクォートの中にいれたら 変数も文字列として扱われます。 sql.Append(" KEN_ID = '" & @KEN_ID & "'")

kapibaraPG
質問者

補足

回答ありがとうございます @KEN_ID を""からはずすとエラーになってしまいます @KEN_ID自体は文字列で、.AddParameterで変換するので文字列からはずすことはできません・・・ ですが、KEN_IDをシングルコーテーションで囲むのを忘れてました; ありがとうございます

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB2010 SQLのUPDATE文エラー

    VB2010とAccess2007で使用しています データを日付順に連番を付けるコードを作成したのですが『UPDATE文構文エラーです』等のエラーが発生します? ご教授お願いします。 Private Sub Button連番_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button連番.Click Dim DT As New DataTable Try Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "SELECT * FROM tableA ORDER BY 依頼日" Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "UPDATE tableA SET No = @no WHERE 登録ID_Export = @登録ID" Dim OleCmd As New OleDbCommand(SQL) OleCmd.Connection = OleCn OleCn.Open() OleCmd.Parameters.Add("@no", OleDbType.Integer) OleCmd.Parameters.Add("@登録ID", OleDbType.Integer) For i As Integer = 1 To DT.Rows.Count OleCmd.Parameters("@no").Value = i OleCmd.Parameters("@登録ID").Value = CInt(DT.Rows(i)("登録ID_Export").ToString) OleCmd.ExecuteNonQuery() Next i OleCmd.Dispose() OleCn.Dispose() End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try MsgBox("ok") End Sub

  • MySQLとのOLE接続に関して

    環境:Visual Basic2008 DB:MySQL 教えて下さい。 MySQLにOLEプロバイダ経由で接続したいと考え、以下のように記述しましたが、下記の★印の ところで、次のようなエラーとなってしまいます。 何が原因か教えて頂きたいと思います。 よろしくお願いします。 【エラー内容】 エラー メッセージはありません。結果コードは E_FAIL(0x80004005) です。 【記述内容】 ' 全レコードを取得してコンソールに出力 Dim syain As New DataTable() Dim msg As String Dim strOut As String Const SELECT_発注データ As String = "SELECT * FROM T_発注データ" Dim con As New OleDbConnection() Dim cmd As New OleDbCommand() Dim da As New OleDbDataAdapter() Dim dt As DataSet = New DataSet() Try ' DB接続文字列の設定 con.ConnectionString = "Provider=MySQLProv;Data Source=localhost;User Id=root;Password=000000;" ' コネクションの設定 cmd.Connection = con ' SQL文の設定 cmd.CommandText = SELECT_発注データ ' データを取得する da.SelectCommand = cmd da.Fill(syain)  ・・・・ ★★★ Catch ex As Exception ' 例外が発生した時の処理 End Try

  • 【ASP.NET】MySQLのテーブルレコードの検索結果について

    お世話になります。ASP.NETおよびMySQLに関する質問です。 現在、ASP.NETで開発をおこなっております。 データベースにはMySQLを使用しており、以下の内容でSELECT文を 発行してテーブルレコードを取得しております。 ------------------------------------------------------ Private Function fcSelect_Table As DataTable Dim dt As New DataTable 'DB接続文字列の設定 Dim connectionString As String connectionString = "server=localhost;database=db01;user id=xxx; password=xxx;" 'DB接続 Dim _Connection As New MySqlConnection(connectionString) _Connection.Open() Dim cmd As MySqlCommand = _Connection.CreateCommand() Dim dr As MySqlDataReader = Nothing Try 'SQL文の作成 sql.Length = 0 'SELECT sql.Append(" SELECT " & vbCrLf) sql.Append(" ,AFFI_CODE " & vbCrLf) sql.Append(" ,REGIST_NUM " & vbCrLf) sql.Append(" ,KIND " & vbCrLf) 'FROM sql.Append(" FROM TBL_TEST " & vbCrLf) 'WHERE sql.Append(" WHERE " & vbCrLf) sql.Append(" AND AFFI_CODE = '" & Trim(tfx_所属.Text) & "'" & vbCrLf) sql.Append(" AND REGIST_NUM = '" & Trim(tfn_登録番号.Text) & "'" & vbCrLf) sql.Append(" AND KIND = '" & DropDownList_種別.SelectedIndex & "'" & vbCrLf) 'MySQLCommand作成 cmd.CommandText = sql.ToString 'SQL文実行 dr = cmd.ExecuteReader()       // 正常処理されることを確認済 // ここにDataTable型オブジェクトdt にdrの内容を格納する処理が必要? Catch ex As Exception End Try Return dt End Function ------------------------------------------------------ 上記で取得した結果をDataTableに格納し、それを画面に表示させたいのですが、DataTableへの格納方法がわかりません。 どなたかご教授いただけないでしょうか?

  • ADO.NETのDataSetのコピー

    ADO.NETでsdfファイルからmdbファイルへテーブル(TBL1)を移行させたいと思っています。 以下のようなコードでDataSetをコピーできないか試しましたが、移行できません。 sdf、mdbともテーブルのカラムの構造は同一です。 mdbの方にはレコードが空のテーブルが用意してあります。 何が間違っているのでしょうか?お教えいただけると助かります。 SDF Dim con As SqlCeConnection = DBUtility.GetConnection() con.Open() Dim strSQL As String strSQL = "select * from TBL1" Dim adapter As SqlCeDataAdapter = _ New SqlCeDataAdapter(New SqlCeCommand(strSQL, con)) con.Close() Dim ds1 As DataSet = New DataSet() adapter.Fill(ds1, "TBL1") Dim con2 As OleDbConnection = DBUtility.GetOLEConnection() con2.Open() 'MDB Dim strSQL2 As String strSQL2 = "select * from TBL1" Dim adapter2 As OleDbDataAdapter = _ New OleDbDataAdapter(New OleDbCommand(strSQL2, con2)) Dim ds2 As DataSet = New DataSet() ds2 = ds1.Copy Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(adapter2) adapter2.Update(ds2, "TBL1")

  • sql2000 vb2008接続

    VB2008/standard editionでremote PC/dynabook1のMSDE/sql2000 のnCalnartに接続を試みるとき error/providerはサポートされていません/がでます。 デザイン時には接続されるのですが 原因と対策をお教えください Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection scn.ConnectionString = "Provider=SQLOLEDB;Data Source=DYNABOOK1;Persist Security Info=True;User ID=sa;Initial Catalog=nCalnart" Try scn.Open() MessageBox.Show("接続しました") scn.Close() MessageBox.Show("切断しました") Catch ex As Exception MessageBox.Show(ex.Message, "error") End Try

  • VB2010でのSQL日付フォーマット表記変更

    VB2010Expressを使用しています。 VBにてあるCSVファイルの内容をmdbファイルに移行するプログラムを作成しています DateTimePickerの日付を条件にしているんですがCSVの日付表記が『yyyymmdd』になっていて下記のコードでは『 (Me.Date日付.Text).ToString("yyyyMMdd")』の部分で『'String' から 'System.IFormatProvider' への変換時にランタイム エラーが発生する可能性があります。』とエラーが出ます。 自宅PCでは『(Me.Date日付.Text).ToString("yyyyMMdd")』を『DateAdd("d", 0, Me.Date健診日.Text).ToString("yyyyMMdd")』にしたらエラーなく動いたのですが、今日職場のPCで検証したら『型が合いません的なエラーが出てしまいます。(日付部分でのエラーみたいなのですが職場でのエラーをメモし忘れました、スイマセン) 日付のフォーマット変更そしてPCの違いによるエラーの発生原因についてご教授お願いします。 Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FolderPath & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName + " WHERE 日付 BETWEEN " + DateAdd("d", -1, Me.Date日付.Text).ToString("yyyyMMdd") + " AND " + (Me.Date日付.Text).ToString("yyyyMMdd") Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using '===============CSV-importへの登録=============== コード省略 Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try

  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • <>&などを保存する方法をおしえてください。

    <>&などを保存する方法をおしえてください。 NameTextBox CommentTextBox 保存ボタン があり保存ボタンを押すと 下記コードが実行されるようにしました。 これで、保存はできるようになったのですが <>&などを使用するとエラーとなってしまします。 <>&を使用するにはどのようにしたらいいのでしょうか? 教えてください。 Dim strSQL As String = "INSERT INTO tableA (Name,Comment) VALUES (@Name,@Comment)" Using con As New SqlConnection(conStr) Dim command As New SqlCommand(strSQL, con) con.Open() Using cmd1 As SqlDataReader = con.CreateCommand() cmd1.CommandType = CommandType.Text Try with cmd1 .Parameters.Add("@Name", SqlDbType.NVarChar) .Parameters.Add("@Comment", SqlDbType.NVarChar) .Parameters("@Name").Value = NameTextBox .Parameters("@Comment").Value = CommentTextBox End With cmd1.CommandText = strSQL cmd1.ExecuteNonQuery() Catch er As Exception Finally con.Close() Catch ex As Exception Finally con.Close() End Try End Using End Using

  • SQL serverデータ取得

    public static DataSet GetCustomers() { string sql = @"SELECT * FROM M_CHARGE"; SqlConnection conn = new SqlConnection(DBConfiguration.DbConnectionString); SqlDataAdapter da = new SqlDataAdapter(sql, DBConfiguration.DbConnectionString); da.SelectCommand = new SqlCommand(sql, conn); DataSet ds = new DataSet(); ds.Tables.Add("M_CHARGE"); da.Fill(ds, "M_CHARGE"); return ds; } da.Fill(ds, "M_CHARGE");の部分でインスタンスエラーになります。どうしてでしょうか? 誰か教えて下さいお願いします(TдT)

  • SQLのデータの一部分を切り取って表示するには?

    visual basicでSQLのデータを表示する際に、そのデータの左二文字だけ切り取ってdatagridviewに表示したいのですが、やり方がわかりません。 単にselect文でdatagridviewに表示するのはできたのですが。 切り取りには(Strings.Right(A, Len(A) - 6))とこの構文を使えばいいのでしょうか? ちなみにdatagridviewは3列あって、そのうちの1列目だけをそうしたいと思います。 普通に表示した場合のコードは以下のようです。     Dim sConn As SqlClient.SqlConnection Dim sda As SqlClient.SqlDataAdapter Dim ds As New DataSet sConn = New SqlConnection () 'SQLへの接続文字列     sda = New SqlDataAdapter("SELECT * FROM         kakeibo",sConn) 'kakeiboから呼び出す条件 sda.Fill(ds) '呼び出す datagridview1.DataSource = ds.Tables(0) '表示