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

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

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

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

VB.NET

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

Q&A

解決済

2回答

5598閲覧

テキストボックスの文字をコマンドで使用したい 格納方法

SsEe_egg

総合スコア19

SQL

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

VB.NET

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

0グッド

0クリップ

投稿2019/07/01 09:02

編集2019/07/02 00:10

VB.NET
Visual Studio 2013
SQL server

いつもお世話になっております。
Windowsフォームでログイン画面作成中です。

Form1の
テキストボックス1にID入力
テキストボックス2にパスワードを入力し、ボタンをクリックで
その2つと一致する名前をSQL serverから取得し、値があれば名前をForm2で表示
なければ「IDもしくはパスワードが異なります」というメッセージがForm2で表示する仕様です。

詰まってしまったところは、
コマンドの@IDと@passwordにそれぞれのテキストボックスの値を
どのように格納してコマンドにすれば良いか困ってしまいました。
解決出来そうなサイトをいろいろ探したのですが、分かりませんでした。

格納方法が分かるサイト等ありましたら、教えていただけると幸いです。
よろしくお願いいたします。

コードは以下のものを書きました。
(VB.NETは今回はじめて触るので、不審点・見にくい点等ありましたら、指摘していただけると助かります)

Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'コマンド Dim scm As New SqlClient.SqlCommand 'リーダー Dim srd As SqlClient.SqlDataReader Dim SQL As String 'Sqlserverに接続する Dim scn As SqlClient.SqlConnection = _ New SqlClient.SqlConnection("Persist Security Info = true" _ & ";Integrated Security=SSPI;database=test") '接続を開始する scn.Open() 'コマンドを設定(IDとパスワードの判定) scm = New SqlClient.SqlCommand("SELECT Name FROM dbo.test_Table1" _ & "WHERE ID=@ID AND PassWord=@password", scn) scm.CommandText = SQL scm.Connection = scn srd = scm.ExecuteReader 'テキストボックスの入力した値をコマンドで使用したい 'text1にIDを入力、text2にPasswordを入力 Dim text1 = TextBox1.Text Dim text2 = TextBox2.Text     'ここでエラー Dim sqlparam1 As New SqlClient.SqlCommand("@ID", text1) Dim sqlparam2 As New SqlClient.SqlCommand("@password", text2)     'ここもエラー scm.Parameters.Add(sqlparam1, sqlparam2) '取得した内容をウィンドウに表示する Dim f As New Form2() f.ShowDialog(Me) f.Dispose() 'リーダー、コマンドの解放 srd.Close() scn.Close() End Sub End Class

ご指摘ありがとうございます。
エラーを記載していなかったため、訂正します。
・1つ目のエラー

Dim sqlparam1 As New SqlClient.SqlCommand("@ID", text1) Dim sqlparam2 As New SqlClient.SqlCommand("@password", text2)

エラー 1 型 'String' の値を 'System.Data.SqlClient.SqlConnection' に変換できません。

2つ目のエラー

scm.Parameters.Add(sqlparam1, sqlparam2)

エラー 3 型 'System.Data.SqlClient.SqlCommand' の値を 'String' に変換できません。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーが出るのであれば、そのエラーを記載するようにしてください。

VB.NET

1Dim sqlparam1 As New SqlClient.SqlCommand("@ID", text1) 2Dim sqlparam2 As New SqlClient.SqlCommand("@password", text2)

SqlParameterクラスを使いましょう

scm.ParametersはSqlParameterCollectionクラスです。
ドキュメントにあるように、addで書かれている引数のものはありません。
1つづつaddしましょう。

また、ExecuteReaderはパラメータをセットしてから実行しましょう。

投稿2019/07/01 09:33

YAmaGNZ

総合スコア10222

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

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

SsEe_egg

2019/07/02 01:29

適切なアドバイスありがとうございました。 教えていただいたいサイトとアドバイスで解決出来ました。 大変助かりました。
退会済みユーザー

退会済みユーザー

2019/07/02 01:40

質問者さん> ホントに SqlParameter の設定を直しただけで解決したのですか? 私の回答に書きましたが、他にも多々問題点はありそうですが、そこはどうしたのですか?
SsEe_egg

2019/07/02 01:55

ご回答ありがとうございます。 先ほど、SurferOnWwwさんのアドバイス拝見しました。 申し訳ございません。 自身でどこがまだおかしい箇所かをまったく認識できていないことが分かりました。 (今現段階でコンパイルエラーが出てなかったので、解決したものだと判断してしまいました。すみません。) もう一度1からいただいたサイトを参考にしてつくり直して勉強します。
退会済みユーザー

退会済みユーザー

2019/07/02 02:05

中途半端に終わりにするのは止めませんか? そういうのは、Teratail としても有用な情報を蓄積したいらしいので、運用の趣旨に反するように思います。回答者・閲覧者に失礼ですし。
SsEe_egg

2019/07/02 02:22

SurferOnWwwさんのおっしゃるとおりです。 調べる努力を怠って、いそいそと質問してしまい、申し訳ございません。 質問する内容もっと吟味できるよう考えます。 大変失礼しました。
guest

0

コードはコンパイルも通らない状態で、少し添削すれば何とかなるというレベルではないです。(はっきり言って調べる努力が足りないと思います)

今エラーになっている部分を直しても、他の部分がはっきり言ってメチャクチャなので、何ともなりません。

どこがダメかと言うと、ざっと見て致命的なところだけ書くと:

(1) 接続文字列が正しくない(接続先のサーバー/インスタンスの指定がない)

(2) 以下の 2 行はコンストラクタで設定済なのでは? 特に一行目がダメということ分かります?

scm.CommandText = SQL scm.Connection = scn

(3) srd = scm.ExecuteReader は SqlParameter の設定後に実行しないとダメ

(4) SqlParameter の設定がメチャクチャ。以下の記事のサンプルコードを見て全面的に書き直してください。

SqlCommand.Parameters Property
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.sqlclient.sqlcommand.parameters?view=netframework-4.8

(5) コードのコメントに「'取得した内容をウィンドウに表示する」とあるが、取得するコードが一切無い。SqlDataReader を使うなら、それをキーワードにググってください。いくらでも参考になる記事はヒットするはず。例えば下記:

SqlDataReader Class
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.sqlclient.sqldatareader?view=netframework-4.8

以上を参考に全面的に書き直してください。

投稿2019/07/02 01:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問