【发布时间】:2015-12-12 03:00:38
【问题描述】:
需要在 tblMeetings 表中添加一条记录,然后将 tblMeetings 中的那个 ID 列(PK,Int,非空)添加到 tblVotings 表的 Meeting_ID 列(int,非空)。前 2 个查询代码块有效!最后一个受保护的子“ftrInsert_Click”块在我试图将参数从一个表传递到另一个表时不起作用。我没有收到错误,并且记录插入到 tblMeetings 但不是 tblVotings。 我的整个 aspx.vb 页面代码:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Partial Class _NewMeetings
Inherits System.Web.UI.Page
Dim WithEvents ftrInsert As New Button
Protected Sub GridView2_RowCommand(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
If e.CommandName = "ftrInsert" Then
'call the insert sub (sender is the gridview that called the rowCommand,
'UsersDS is the name of our sqlDataSource on the page
gvQuickInsert(sender, SqlDataSource2)
End If
End Sub
Protected Sub gvQuickInsert(ByRef gv As GridView, ByRef ds As SqlDataSource)
Dim paramsArr As ArrayList = New ArrayList
Dim controlsArr As ArrayList = New ArrayList
Dim col As Integer = 0
Dim footrow As GridViewRow = gv.FooterRow
Try
Dim ix As Integer = 0
For ix = 0 To gv.Columns.Count
Dim d As DataControlField = gv.Columns(ix)
If d.InsertVisible = True Then
If footrow.Cells(ix).Controls(1) IsNot Nothing Then
paramsArr.Add(d.SortExpression.ToString)
controlsArr.Add(footrow.Cells(ix).Controls(1))
End If
End If
Next
Catch ex As Exception
End Try
ds.InsertParameters.Clear()
Dim ii As Integer = 0
For Each contr As Object In controlsArr
If contr.GetType.Name.ToLower.Contains("textbox") Then
ds.InsertParameters.Add(paramsArr(ii), TryCast(contr, TextBox).Text)
ElseIf contr.GetType.Name.ToLower.Contains("dropdownlist") Then
ds.InsertParameters.Add(paramsArr(ii), _
TryCast(contr, DropDownList).SelectedValue)
ElseIf contr.GetType.Name.ToLower.Contains("checkbox") Then
If TryCast(contr, CheckBox).Checked Then
ds.InsertParameters.Add(paramsArr(ii), 1)
Else
ds.InsertParameters.Add(paramsArr(ii), 0)
End If
End If
ii = ii + 1
Next
ds.Insert()
gv.DataBind()
End Sub
Protected Sub ftrInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ftrInsert.Click
Dim strConnection As String = ConfigurationManager.ConnectionStrings("ServiceLine_CommitteeConnectionString").ConnectionString
Using con As New SqlConnection(strConnection)
'Dim cmd As New SqlCommand("INSERT INTO tblVotings VALUES (@
Dim Meeting_ID As New SqlParameter("@ID", SqlDbType.Int)
Dim Committee_ID As New SqlParameter("@Comm", SqlDbType.Int)
Dim Member_Name As New SqlParameter("@Member", SqlDbType.NVarChar)
'Dim con As New SqlConnection(strConnection)
Dim cmd As New SqlCommand("INSERT INTO tblVotings(Meeting_ID, Committee_ID, Member_Name) SELECT M.ID AS Meeting_ID, C.ID AS Committee_ID, CM.Full_Name AS Member_Name FROM tblCommitteeName AS C INNER JOIN tblMeetings AS M ON M.ContractCategory = C.Contract_Category AND M.Committee = C.Committee_Name INNER JOIN tblCommitteeMembers AS CM ON CM.Committee = M.Committee WHERE (M.ID IN (@ID)) and (C.ID IN (@Comm)) and (CM.Full_Name IN (@Member))", con)
Meeting_ID.Value = 1
Committee_ID.Value = 1
Member_Name.Value = 1
cmd.Parameters.Add(Meeting_ID)
cmd.Parameters.Add(Committee_ID)
cmd.Parameters.Add(Member_Name)
cmd.Connection = con
cmd.CommandType = CommandType.Text
If con.State <> ConnectionState.Open Then con.Open()
Dim result As Integer = cmd.ExecuteNonQuery()
If con.state = ConnectionState.Open Then con.Close()
End Using
End Sub
结束类
【问题讨论】:
-
您的选择参数似乎有问题。
SELECT C.ID, M.ID, CM.FULL_NAME看起来不像insert into tblVotings(Meeting_ID, Committee_ID, Member_Name)。假设C.ID是tblCommitteeName的ID和M.ID是ID的tblMeetings。我不确定这是否是您要解决的问题,但这只是我注意到的问题。 -
谢谢。我修复了插入语句。现在我只需要知道如何输入会议 ID 的参数。
标签: asp.net vb.net visual-studio-2012