🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2803閲覧

SQLのあいまい検索とVBのreplaceを合わせたい

ryuuzu

総合スコア30

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/10/18 05:21

編集2019/10/18 06:08

SQLServerのデータ検索でカードNOをあいまい検索で条件指定して検索したいです。
カードの番号を入力してデータを検索してレコードを重複しないように
取得するシステムを作りたいのですがカード番号はデータ的は16桁ながらカードそのものに記載された番号は6桁のみです。ややこしくて申し訳ないのですが

・1~8桁目は会社のコードで00700000か00710000の2択です。

・9~14桁目はカードに記載されている個別番号で、重複はしません

・15,16桁目はチェックデジットのコードです。

カード記載の9~14桁目を入力するだけでレコードを取得できるようにしたく、ビジュアルスタジオにVBで以下のコードを組みました。DBMSはSQLServerです。

Private

1Try 2 3 Dim locSqlStr As String = "" 4 5 Dim loc_dataset As New DataSet 6 loc_dataset.Clear() 7 Using conn = New SqlConnection(gConnstring) 8 conn.Open() 9 Using cmd = conn.CreateCommand 10 cmd.CommandText = 11 " 12SELECT [CARDNO] 13 ,[KINGAKU] 14 ,[NAME] 15FROM [PREPAID].[dbo].[ZANDAKAMST] 16 where CARDNO LIKE '%'+'$CARNO$'+'%'" 17 18 cmd.CommandText = cmd.CommandText.Replace("$CARDNO$", pSYAINCD) 19(文字数の関係で以下略)

このコードで起動し、試しに0070000018000390というカードのデータを取得しようとカード記載の6桁180003を入力したところ、データが見つからないというエラー表示が出ました。しかし、カードの16桁すべてを入力したところデータの取得ができました。
SQLServerにて

SELECT [CARDNO] ,[KINGAKU] ,[NAME] FROM [PREPAID].[dbo].[ZANDAKAMST] where CARDNO LIKE '%'+'180003'+'%'"

と入力し実行してもデータの取得ができたのでwhere CARDNO LIKE '%'+'$CARNO$'+'%'の部分がまずかったのかと思うのですがどうすればよいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2019/10/18 05:32

質問はなんなのでしょうか?
ryuuzu

2019/10/18 06:09

申し訳ございません。元の質問が長くてカットされていることに気づいてませんでした。更新いたしました。VBのコードは仰っていただければ提示いたします。
guest

回答2

0

replaceではなく、SQLインジェクション対策されていた方が良いかと思います。
SQLインジェクション対策(ASP.NET,C#,VB.NET編)

投稿2019/10/18 06:35

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuuzu

2019/10/18 07:11

テストサーバーのテストテーブルで作った適当なデータなので大丈夫と思ったのですがまずかったでしょうか?すみません、セキュリティの意識が甘かったようです。
sazi

2019/10/18 07:15

プログラムの作りの話ですから、質問内容のデータに関しては問題無いですよ。
ryuuzu

2019/10/18 07:36

そういう事でしたか。ありがとうございます。
guest

0

ベストアンサー

提示されたソースは実際に動作させているコードをコピーしたものですか?
もしそうなのであれば、実行しているcmd.CommandTextをデバッガで確認してみてください。
実際のカード番号(pSYAINCD)に置き換わっていないことが確認できるはずです。
何故置き換わっていないかですが、置き換えようとしている文字をよく確認してみてください。

投稿2019/10/18 06:24

YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuuzu

2019/10/18 07:39

こんな簡単なことだったとは・・・!デバッガの存在を知らなかったのでとても助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問