質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1610閲覧

VB.NET  プログラムの処理について

mon121

総合スコア2

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/12/18 06:58

編集2021/12/19 02:52

VB.NETでログイン機能を作成しています。
先に行っておくとエラーなどはでておらず、プログラムとしては完成しております。

下記のようなプログラムを様々なサイトを参考にし作成しました。
VB.NETで作成し、機能の説明をするとID(テキストボックス1)とパスワード(テキストボックス
2)に、IDとパスワードを入力し、データベース上のデータと一致すればメニュー画面へ移行。
それ以外の場合はエラー画面を表示するというプログラムです。

データーベースはSQLサーバーで作成しております。

質問は、このプログラムについてなのですが下記のような処理を行っているイメージで
あっていますでしょうか

IDとパスワードがテキストボックスに入力される

データベースを検索

一致している行があれば次のフォームへいき、一致項目があった時点で検索が終了する

というイメージなのですが合っていますでしょうか

また、下記の記述部分に関してですが

SQL &= " USER_ID='" + id + "' AND PASSWORD='" + pass + "' "

変数の横の + の意味がわかりません。
ここの部分はあるサイトの記述をコピペし作成したのですが、
どのような処理が行われているのかがはっきりとわかりません

入力したIDとデータベース上のUSER_IDが一致しているかを見ているのだとは思いますが、
+を記載する意味がよくわかりません

サイトを見られれば良いのですが、あまりに多くのサイトをみたため、サイトがわからなくなってしまいました。

調べてもよくわからなかったため、ご回答いただければと思います。

該当のソースコード

Public Class rogin Private Sub rogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub 'ログインボタン' Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try 'データベース接続 Dim serverName As String = "***" Dim dataBase As String = "***" Dim userid As String = "***" Dim pwd As String = "***" Using conn As New SqlClient.SqlConnection() conn.ConnectionString = " Data Source = " & serverName & ";Initial Catalog = " & dataBase & ";User ID = " & userid & ";Password =" & pwd conn.Open() Dim id As String id = TextBox1.Text Dim pass As String pass = TextBox2.Text 'SQLの設定 Dim cd As New SqlClient.SqlCommand Dim dr As SqlClient.SqlDataReader Dim SQL As String 'SQL文生成 SQL = "" SQL &= "SELECT" SQL &= " *" SQL &= " FROM" SQL &= " MST_USER" SQL &= " WHERE" SQL &= " USER_ID='" + id + "' AND PASSWORD='" + pass + "' " 'SQLコマンド設定 cd.CommandText = SQL cd.Connection = conn dr = cd.ExecuteReader If dr.Read() = True Then 'メニュー画面を表示 Dim D2 As New Menu D2.Show() '自画面を非表示 Me.Visible = False Else 'エラー画面を表示 Dim D1 As New roguin_error D1.Show() End If dr.Close() cd.Dispose() conn.Close() conn.Dispose() End Using Catch ex As Exception End Try End Sub End Class

ここにより詳細な情報を記載してください。
環境 ウィンドウズ7
プログラム VB.NET
フレームワーク NET Framework 4.5

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

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

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

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

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

cx20

2021/12/18 08:45

sa のパスワードを質問文に載せるのはやめましょう。。(せめて「****」とかにしておいてください。) ダミーのパスワードだと信じたいですが・・ もし実在するパスワードでしたらセキュリティ事故になりかねませんので、質問の削除依頼をされることをお勧めします。 <参考> ■ 管理不備の「MS SQL Server」狙うアクセスが増加 https://www.security-next.com/069653
退会済みユーザー

退会済みユーザー

2021/12/19 00:33

質問者さん、無言ですが、回答がでているのでそれらに対するフィードバックを回答のコメント欄に書いてください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったなら、どこがダメなのかを書いてもらえるとより期待に近い回答が出てくるかも。とにかく無言で放置は NG です。
guest

回答2

0

ベストアンサー

SQL &= " USER_ID='" + id + "' AND PASSWORD='" + pass + "' "
変数の横の + の意味がわかりません。

それは文字列の連結に使うもので & と同じです。ただし、全く同じではないので注意。詳しくは以下の記事を見てください。

文字列を連結する
https://dobon.net/vb/dotnet/string/concat.html


【追伸】

接続文字列や SQL 文を & とか + を使って文字列を連結して組み立てるのは止めましょう。

可読性が悪くなるというデメリットしかありません。

特に、ユーザー入力で SQL 文を組み立てるのは禁止です。パラメータ化しましょう。パラメータ化は SQL インジェクション防止に必須です。場合によってはパフォーマンスの向上も期待できます。パラメータ化してない SQL 文はセキュリティ無視の論外のものと認識しましょう。

投稿2021/12/18 08:05

編集2021/12/18 08:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mon121

2021/12/19 03:06

ご回答ありがとうございます。 まず、SQLサーバーのIDとパスワードについてですが、確かに情報を載せるのは迂闊でした。*で修正をしておきました。今後は載せいないように気を付けます。 プログラムの書き方についてですが、パラメータ化というのを初めて知りました。 今後はこの記述方法で記述いたします。
退会済みユーザー

退会済みユーザー

2021/12/19 03:25

例えば TextBox1 へのユーザー入力が "1"、TextBox2 が "password" のとき、組み立てた SQL 文は以下のようになるということは理解できたのでしょうか? SELECT * FROM MST_USER WHERE USER_ID=1 AND PASSWORD='password' その SQL 文をパラメータ化するのはリテラル、即ち上でいうと 1 と 'password' の部分をプレースフォルダを使って書くということです。詳しくは「パラメータ化クエリ」などをキーワードにググるといろいろ参考になる記事がヒットすると思いますので調べてください。
mon121

2021/12/19 04:24

SELECT * FROM MST_USER WHERE USER_ID=1 AND PASSWORD='password' このようになるのは理解できました。&と+の違いについても、参照URLのサイトを見て理解できました。 パラメータ化クエリについてはまだ理解できてない部分が多いので、上記のワードで調べてみます。
guest

0

どのような処理が行われているのかがはっきりとわかりません

どういった SQL 文が発行されているか、中身を確認してみることをお勧めします。
ブレークポイントを設定して変数をウォッチするか、MessageBox 等を使用して中身を確認してみて下さい。

VBNET

1MessageBox.Show(SQL)

<参考>
■ VB.NETでのデバック方法
https://hironimo.com/prog/vbnet/vb-net-debug/

投稿2021/12/18 07:31

cx20

総合スコア4633

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問