Asp.net 从一个表中获取数据并通过表单提交插入到另一个表中
如何从一个数据库表(用户)中获取要插入另一个表(票证)的用户ID?每个表中的两列都具有相同的数据类型(int)。请看一看:Asp.net 从一个表中获取数据并通过表单提交插入到另一个表中,asp.net,visual-studio-2010,Asp.net,Visual Studio 2010,如何从一个数据库表(用户)中获取要插入另一个表(票证)的用户ID?每个表中的两列都具有相同的数据类型(int)。请看一看: 用户 用户ID 用户名 密码 名字 姓氏 电子邮件 已更新 已删除 门票 TicketID 创建日期 UserIDNumFK 全名 电子邮件 主题 消息 已删除 这些都是涉及的代码: Partial Public Class mysupport Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal se
用户
用户ID
用户名
密码
名字
姓氏
电子邮件
已更新
已删除
门票
TicketID
创建日期
UserIDNum
FK全名
电子邮件
主题
消息
已删除
这些都是涉及的代码:
Partial Public Class mysupport
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Page.IsPostBack Then
MaintainScrollPositionOnPostBack = True
SetFocus(helpTopicDDL)
Else
SetFocus(fullNameTXTBOX)
End If
Dim sConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("TrackTicketsConnectionString2").ConnectionString)
sConnection.Open()
If Session("Ticket") Is Nothing Then
Response.Redirect("SignIn.aspx")
Else
Dim cmdS As String = "Select * from Users Where Deleted='N' AND Username=@Username"
Dim cmdCheckEmail As New SqlCommand(cmdS, sConnection)
Dim cmd As New Data.SqlClient.SqlParameter("@Username", Data.SqlDbType.VarChar)
cmdCheckEmail.Parameters.Add("@Username", SqlDbType.VarChar)
cmdCheckEmail.Parameters.Item("@Username").Value = Session("Ticket")
Dim obj As Object = cmdCheckEmail.ExecuteScalar()
If obj IsNot Nothing Then
mailLBL.Text = Convert.ToString(obj)
End If
End If
sConnection.Close()
End Sub
Protected Sub submitBTN_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles submitBTN.Click
Dim sdConnection As String = ConfigurationManager.AppSettings("TrackTicketsConnectionString2")
Dim iRowCount As Integer
Dim cmdInsertTicket As New Data.SqlClient.SqlCommand
Dim conticket As New Data.SqlClient.SqlConnection
conticket.ConnectionString = sdConnection
cmdInsertTicket.Connection = conticket
cmdInsertTicket.CommandText = "Insert Into Ticket " _
& "( DateCreated, FullName, Email, TicketType, Subject, Message, Deleted)" _
& "Values( @DateCreated, @FullName, @Email, @TicketType, @Subject, @Message, @Deleted)"
'Dim appUserName As New Data.SqlClient.SqlParameter("@UserName", Data.SqlDbType.NVarChar)
'cmdInsertTicket.Parameters.Add(appUserName)
'cmdInsertTicket.Parameters.Item("@UserName").Value = User.Identity.Name
Dim appDateCreated As New Data.SqlClient.SqlParameter("@DateCreated", Data.SqlDbType.DateTime)
cmdInsertTicket.Parameters.Add(appDateCreated)
cmdInsertTicket.Parameters.Item("@DateCreated").Value = Now()
Dim appFullName As New Data.SqlClient.SqlParameter("@FullName", Data.SqlDbType.VarChar)
cmdInsertTicket.Parameters.Add(appFullName)
cmdInsertTicket.Parameters.Item("@FullName").Value = fullNameTXTBOX.Text
Dim appEmail As New Data.SqlClient.SqlParameter("@Email", Data.SqlDbType.VarChar)
cmdInsertTicket.Parameters.Add(appEmail)
cmdInsertTicket.Parameters.Item("@Email").Value = emailAddTXTBOX.Text
Dim appTicketType As New Data.SqlClient.SqlParameter("@TicketType", Data.SqlDbType.VarChar)
cmdInsertTicket.Parameters.Add(appTicketType)
cmdInsertTicket.Parameters.Item("@TicketType").Value = helpTopicDDL.SelectedValue
Dim appSubject As New Data.SqlClient.SqlParameter("@Subject", Data.SqlDbType.VarChar)
cmdInsertTicket.Parameters.Add(appSubject)
cmdInsertTicket.Parameters.Item("@Subject").Value = subjectTXTBOX.Text
Dim appMessage As New Data.SqlClient.SqlParameter("@Message", Data.SqlDbType.VarChar)
cmdInsertTicket.Parameters.Add(appMessage)
cmdInsertTicket.Parameters.Item("@Message").Value = messageTXTBOX.Text
Dim appDeleted As New Data.SqlClient.SqlParameter("@Deleted", Data.SqlDbType.Char)
cmdInsertTicket.Parameters.Add(appDeleted)
cmdInsertTicket.Parameters.Item("@Deleted").Value = "N"
conticket.Open()
Try
iRowCount = cmdInsertTicket.ExecuteScalar()
statusLBL.Text = "Ticket has been submitted successfully."
Catch
statusLBL.Text = "Ticket has not been submitted. Please try again."
End Try
conticket.Close()
End Sub
我真正想要的是在一个人登录填写表单并提交表单后,将其用户ID存储在Ticket表中。我不知道如何从Users表中提取数据以插入到Ticket表中。非常感谢您的帮助,因为我还在学习。编辑:
首先添加记录时,将UserID
插入Tickets
表需要您有权访问UserID
值。然后需要在INSERT
语句中传递该值
看起来我们首先需要检索用户ID。由于您使用的是表单身份验证
,因此我们可以从User.Identity.Name
对象中检索用户名,并在第一次查询中使用该值来检索用户名
Dim cmdS As String = "Select [UserID] from Users Where Deleted='N' AND UserName=@UserName"
Dim cmdGetUserId As New SqlCommand(cmdS, sConnection)
Dim cmd As New Data.SqlClient.SqlParameter("@UserName", Data.SqlDbType.VarChar)
cmdGetUserId.Parameters.Add("@UserName", SqlDbType.VarChar)
cmdGetUserId.Parameters.Item("@UserName").Value = User.Identity.Name
Dim obj As Object = cmdGetUserId.ExecuteScalar
Dim myUserId As Integer = Integer.Parse(obj)
现在我们有了当前用户的UserId值,我们可以修改INSERT
语句和参数
cmdInsertTicket.Connection = conticket
cmdInsertTicket.CommandText = "INSERT INTO Ticket " _
& "(UserID, DateCreated, FullName, Email, TicketType, Subject, Message, Deleted)" _
& "Values(@UserID, @DateCreated, @FullName, @Email, @TicketType, @Subject, @Message, @Deleted)"
Dim appUserId As New Data.SqlClient.SqlParameter("@UserID", Data.SqlDbType.Int)
cmdInsertTicket.Parameters.Add(appUserId)
cmdInsertTicket.Parameters.Item("@UserID").Value = myUserId
Dim appDateCreated As New Data.SqlClient.SqlParameter("@DateCreated", Data.SqlDbType.DateTime)
cmdInsertTicket.Parameters.Add(appDateCreated)
cmdInsertTicket.Parameters.Item("@DateCreated").Value = Now()
...
Dim appDeleted As New Data.SqlClient.SqlParameter("@Deleted", Data.SqlDbType.Char)
cmdInsertTicket.Parameters.Add(appDeleted)
cmdInsertTicket.Parameters.Item("@Deleted").Value = "N"
用户通过身份验证后,可以通过User.Identity
对象访问身份验证信息。如果您需要经常访问用户ID,可能还需要考虑实现一个自定义的IIdentity
类来存储该用户ID。下面是一篇关于自定义身份验证的MSDN文章:
更新:
关于下面的注释,您正在检索UserID,因为
SqlCommand
是使用ExecuteScalar
方法执行的,该方法返回第一行第一列的值。我建议您仔细看看SqlCommand
object:和MSDN上的ADO.NET入门:您是如何验证用户的?是否进行认证?@SeanPetiya:是的。我正在使用表单身份验证。我可以这样做:cmdInsertTicket.Parameters.Item(“@UserIDNum”).Value=User.Identity.Name
,然后查询用户表中的记录吗?另外,感谢您的MSDN文章!您能包含此查询的所有代码吗?我假设@UserIDNum
是一个整数,User.Identity.Name
将是一个字符串,但我想看看您是如何查询数据库的,这样我可以给您一个更好的答案。您是对的,@UserIDNum
是一个整数。我还没有弄明白这个查询,但我会继续处理它。我刚刚在这里添加了我所有的代码。以前,在Person's Info(mailLBL)下,它将显示用户的电子邮件,现在显示用户ID。请告知我做错了什么?谢谢。@FabianBigler:你能帮帮我吗?