背景: 私は、ユーザーがログインして製品テストのデータを入力するように求めるアプリケーションをVBで作成しています。SQLデータベースから入力します。ログインしたユーザーと一致し、データバインドされたフォームで表示します
問題: 私はSQLデータベースと会話し、その人が正しいユーザー名/パスワードを提供していることを確認するログインフォームを持っています。ユーザー名はメインフォームに渡されます。ここからは、ログインしたユーザーによって追加されたメインテーブルのレコードを記入できるようにしたいので、ユーザーは入力したレコードとのみ対話できます。
私はVBでかなり自信があり、SQLでクラスを取りましたが、正しい方法を見つけるためにこの問題を検索する方法はわかりません。私はtableadapters.fillと.getdataを見てきましたが、答えとは思われません。
ログインフォーム:
Imports System.Data
Imports System.Data.SqlClient
Public Class frmLogin
Dim userName As String
Dim extrainfo As String
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
If ConnectToSQL() Then
Dim frm As New frmQuality(userName, extrainfo)
Me.Hide()
frm.Show()
Me.Close()
End If
End Sub
Private Function ConnectToSQL() As Boolean
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Dim dbPassword As String
Dim enteredPasswrd As String
' Dim userName As String
Try
con.ConnectionString = "Data Source "
con.Open()
cmd.Connection = con
cmd.CommandText = " SELECT UserName, Password, extrainfo FROM users WHERE (UserName like '" & "%" & txtUsername.Text.ToLower() & "%" & "')"
Dim lrd As SqlDataReader = cmd.ExecuteReader()
If lrd.HasRows Then
While lrd.Read()
'Do something here
dbPassword = lrd("Password").ToString()
userName = lrd("UserName").ToString()
extrainfo = lrd("assigned_ei").ToString()
enteredPasswrd = txtPassword.Text()
If dbPassword.Trim() = enteredPasswrd And userName.TrimEnd(vbCrLf.ToCharArray).ToLower() = txtUsername.Text.ToLower() Then
Return True
'Clear all fields
txtPassword.Text = ""
txtUsername.Text = ""
Else
MsgBox("Incorrect Password")
End If
End While
Else
MessageBox.Show("Username and Password do not match..", "Authentication Failure", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
'Clear all fields
txtPassword.Text = ""
txtUsername.Text = ""
End If
Return False
Catch ex As Exception
MessageBox.Show("Error while connecting to SQL Server." & ex.Message)
Finally
con.Close() 'Whether there is error or not. Close the connection.
End Try
End Function
Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtUsername.Focus()
End Sub
End Class
メインフォーム
ピック:https://i.imgur.com/LY6wjQZ.png
コード
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Try
con.ConnectionString = "Data Source = location"
con.Open()
cmd.Connection = con
cmd.CommandText = " SELECT * FROM table WHERE adduser = '" & user & "'"
Dim lrd As SqlDataReader = cmd.ExecuteReader()
If lrd.HasRows Then
While lrd.Read()
' i see that above can pull the info
' but how do I get it into the form?
End While
End If
Catch ex As Exception
MessageBox.Show("Error while connecting to SQL Server." & ex.Message)
Finally
con.Close() 'Whether there is error or not. Close the connection.
End Try
End Sub
私はメインテーブルを持つデータベースを持っている情報の9列があります。 1つは、ログインしてデータを入力するユーザーであるaddUserです。彼らが記録を表示するだけでログインする必要があります。私はテキストボックスに直接添付したくありません。あなたがフォームから見ることができるように、あなたは最初に所有者の最後のレコードを見て周りに移動することができます。私はレコードをブラウズできるようにする必要があります。 1人でログインし、1〜10個以上のレコードを持つことができます。このアプリケーションでは、新しいレコードを移動または作成できます。これはどうすればいいですか?
あなたは 'SqlConnection'、' SqlCommand'と 'DataTable'を使う必要があります。これらを使用すると、 'SqlConnection'を使ってデータベースに接続することができます。 'SqlCommand'を使ってSQLコマンドを実行し(' SqlParameters'を使ってください)、 'DataTable'を記入してください。 'DataTable'を' DataGridView'のようなビューに割り当てることができます。あなたの 'SELECT'ステートメントは' SELECT column1、column2 FROM table WHERE userId = @ userId'のようになります。列を列に、 'table'を表の名前に変更します。 [this](http://stackoverflow.com/a/41954987/6375113)のようなものが役に立ちます。 – Bugs
私のコメントから、あなたの質問はかなり広いことがわかります。考慮すべきことがたくさんあるので、私がまとめたものを見て、それにつきまして、さらに具体的な問題に戻ってください:) – Bugs
ありがとう、ありがとうございます。私はこれを作成することができますが、どうやってフォームに入れるのですか?フォーム上には、データ入力に必要な他の情報を取り込むためのデータバインディングがあります。だから、単にこの "クエリ"をフォーム上でブラウズ可能にするにはどうすればいいですか? –