【发布时间】:2019-06-09 23:54:13
【问题描述】:
我一直在练习和使用 VB.NET 和 ASP.NET 中的代码。我有一个程序,其中我有一个 GridView 名称 gvPerson。在 GridView 中,有一个人员列表及其详细信息,例如姓名、徽章编号、雇用日期等。在 GridView 顶部,我有链接按钮控件:添加人员、发布人员设备、编辑人员和删除人员.例如,当我从网格视图中选择某人然后单击发布人员设备时,所选人员的姓名和 ID 将显示在出现的模式表单上。我现在的问题是当我运行我的代码时,我收到一个错误,指出我的 DataAdapter 中没有任何内容。对此有点陌生,我相信我的逻辑有点不对劲,我可能错过了一些东西。这是我所拥有的:
Dim strSelectedPersonID As String
Dim strSelectedPersonName As String
Dim strSelectPosition As String
Dim strBadgeNo As String
If e.CommandName = "Select" Then
idx = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = gvPerson.Rows(idx)
strSelectedPersonID = row.Cells(1).Text
Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString2").ToString())
conn.Open()
Dim dsPerson As New DataSet()
Dim dr As SqlDataReader
Dim da As SqlDataAdapter
Dim strSelectCmd As String = "SELECT * FROM Personnel WHERE SempID = @SempID "
Dim cmd As New SqlCommand(strSelectCmd, conn)
cmd.Parameters.AddWithValue("@SempID", strSelectedPersonID)
cmd.Connection = conn
da.SelectCommand = cmd
dr = cmd.ExecuteReader()
If dr.HasRows Then
While (dr.Read())
strSelectPosition = dr(3).ToString
strBadgeNo = dr(4).ToString
End While
End If
strSelectedPersonName = cmd.ExecuteScalar()
tbEditPosition.Text = strSelectPosition
tbEditBadge.Text = strBadgeNo
conn.Close()
End Using
End If
tbSecID.Text = strSelectedPersonID
tbSecName.Text = strSelectedPersonName
编辑: 这是我使用 DataAdapter 的代码:
Try
strconn.Open()
Dim sQuery As String = "SELECT * FROM tblUsers WHERE Username = @Username AND Password = @Password AND Status= @Status"
Dim datareader As SqlDataReader
Dim adapter As New SqlDataAdapter
Dim parameter As New SqlParameter
Dim command As SqlCommand = New SqlCommand(sQuery, strconn)
command.Parameters.AddWithValue("@Username", txtUsername.Text)
command.Parameters.AddWithValue("@Password", txtPassword.Text)
command.Parameters.AddWithValue("@Status", 1)
command.Connection = strconn
adapter.SelectCommand = command
datareader = command.ExecuteReader()
If datareader.HasRows Then
While (datareader.Read())
strUserID = datareader(0).ToString
strUserFname = datareader(3).ToString
strUserLname = datareader(4).ToString
End While
xPersonID = strUserID
xPersonName = strUserFname + " " + strUserLname
'MsgBox("Login Successfull! ", vbInformation, vbOKOnly)
Response.Redirect("http://localhost:00000/index.aspx")
datareader.Close()
LoginOk = True
Else
Response.Write("<SCRIPT LANGUAGE=""JavaScript""> alert('Invalid Username or Password!');</script>")
' MsgBox("Invalid Username or Password! ", vbInformation, vbOKOnly)
txtUsername.Text = ""
txtPassword.Text = ""
txtUsername.Focus()
End If
datareader.Close()
Catch ex As Exception
'MsgBox(ex.Message)
End Try
【问题讨论】:
-
确实如此,您的代码从不向 DataAdapter 添加任何数据(代码中的
da)。通常你会期望一个Fill命令或类似的命令来填充它的查询结果。也许检查一些教程。 -
您发布的代码与您的描述不符。 da 从未使用“new”初始化,因此无法使用。如果这只是缺少一行,那么您声称的错误会发生在其他地方,因为 da 永远不会被填充。如果您的代码中的其他地方有 da,那么发布的 sn-p 中就不是这个。
-
@LarsTech 问题是:我有使用它的代码,在我的实验中,我想尝试不同的代码,看看我是否能实现我想要完成的目标。我可以使用我在其他形式中使用的“da”添加代码。
-
DataReaders 和 DataAdapters 是两个不同的东西。您的阅读器仅通过集合向前迭代,而适配器将填充 DataSet 或 DataTable 供您自行决定处理数据。
标签: asp.net sql-server vb.net