度々お世話になります
Windows7、VB2010(Windowsフォーム)、SQL Server で開発し、XPと7で画面を動かします
今、SQLでパラメータを使っており、エラー処理で困っております
SQLのパラメータの内容が表示されない(SQLが、「~~~~ WHERE KEN_ID = @KEN_ID」そのままになり、「~~~~ KEN_ID = '01'」等にならない)
です
Dim sql As New StringBuilder
Dim ds As DataSet
Using con As New Common.DB(Common.Values.ConnectionString)
Try
sql.Append("SELECT KEN_NAM FROM KEN_M")
sql.Append(" WHERE")
sql.Append(" KEN_ID = @KEN_ID")
con.ClearParameter()
con.AddParameter("KEN_ID", strKenName)
ds = con.GetDataSet(sql.ToString)
Return dt
Catch ex As Exception
'Throw New Exception(ex.ToString & vbCrLf & sql.ToString)
MsgBox("県取得処理" & vbcrlf & Sql.Tostring)
End Try
End Using
---- ↓ 別プロジェクト ↓ ---
Public Function GetDataSet(ByVal sql As String) As DataSet
Command.CommandText = sql
If String.IsNullOrEmpty(Command.CommandText) Then
Throw New Exception("SQLが指定されていません")
End If
Dim adapter As New SqlDataAdapter(Command)
Try
adapter.Fill(ds)
Return ds
Catch ex As Exception
Throw New Exception("DataSetオブジェクトの取得に失敗しました。", ex)
End Try
と書いております
よろしくお願いします
No.3ベストアンサー
- 回答日時:
> ですが、KEN_IDをシングルコーテーションで囲むのを忘れてました;
> ありがとうございます
それはまずい気がする。。。
SqlParameter クラスの中で、SqlDbType に応じて文字列を必要な形式に
変換してくれるはずだから、SQL の本文にシングルコーテーションを
つけると動作が変わってしまいそうに思います。
データにシングルコーテーションを含む場合など、十分にパターンテスト
して確認しておきましょう。
#1の方は SQL 文内の(パラメータ)変数と VB.NET の変数を混同している
ようです。
#2の方が言うようにデータベースにそのまま渡ってから処理されるので
自力で置き換えるか、むしろ CommandText はそのまま出力して、それとは
別に Command.Parameters コレクションをループで回してパラメータの
値を全部書き出せばいいような気もします。
どちらにしろ、Common.DB という自作クラスを前提に質問されても
こちらでは理解できませんので、そのクラスを設計された方に相談して
ください。
ありがとうございます
''はすいません
型変換してくれるのでつい忘れてしまいがちです;
パラメータ変数を使えば'がついても正常に動作してくれるので便利ですね
command.Parameters.itemの中にパラメータが入っていたので、conを受け取ってcommandに入れて、パラメータを出力する方向で決まりました
ありがとうございました
No.2
- 回答日時:
Common.DBクラスが何をしているのかわかりませんが,
パラメータを最終的に処理するのはSQL Serverエンジンになります。
# Sql Profilerで確認すると@KEN_IDがそのままエンジンまで届いていることが確認できます。
このため,@KEN_IDがクライアント側で展開されることはありません。
また,エラー処理中でSql.ToString()を出力していますが,
StringBuilderクラスは汎用クラスのため,パラメータを置き換えるような処理は当然ながらありません。
基本的には,
・自力で展開する
・パラメータを別途出力する
のどちらかになると思います。私であれば後者を選択します。
ただし,どうもCommon.DBクラスに処理を委譲しているようなので,Common.DBクラスがこのための処理をある程度代行する必要があると思います。
ありがとうございます。
DBクラスは、コネクションの接続やSQL実行をしている部分です
DBクラスのconnectionを受け取り、command内のパラメータを出力する方向で決まりました
ありがとうございました
No.1
- 回答日時:
> sql.Append(" KEN_ID = @KEN_ID")
変数をダブルクォートの中にいれたら
変数も文字列として扱われます。
sql.Append(" KEN_ID = '" & @KEN_ID & "'")
この回答への補足
回答ありがとうございます
@KEN_ID を""からはずすとエラーになってしまいます
@KEN_ID自体は文字列で、.AddParameterで変換するので文字列からはずすことはできません・・・
ですが、KEN_IDをシングルコーテーションで囲むのを忘れてました;
ありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DirectX C++/CLIで作成したDLL...
-
4バイト整数を使っているため
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
mainメソッドのthrows節で設定...
-
「タイプ初期化子が例外をスロ...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
Excelで =EMBED("Acrobat Docu...
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
レコード件数の表示
-
「天声人語」をインターネット...
-
final修飾子を使っているのに、...
-
Java初級 引数に適用できません
-
クラス間でのデータ参照
-
VB.NET getとsetの概念がわかり...
-
VBAでの[]
-
VB.NETでフォーム上にExcelのよ...
-
(vba)他のアプリケーションの右...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
4バイト整数を使っているため
-
MFCで水平スクロールバー
-
DataGridで特定の行のスタイル...
-
LV_ITEM構造体のメンバlParamに...
-
VC++.NET2003でユーザー関数内...
-
セットアップ先のPCでエラー
-
DirectInputが上手く動きません;
-
Varianntメモリリークについて
-
python3 各引数の意味と、引数...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
3年間同じクラスになる確率
-
パワーポイントのVBAでテキスト...
-
private static という変数の修飾
-
「天声人語」をインターネット...
-
VB.NET getとsetの概念がわかり...
-
エクセルVBAにおけるON TIMEメ...
-
【sendkeysメソッドが動かずに...
おすすめ情報