Sometimes you may require to insert multiple records from one text field (textarea). This can be done for multiple user choices or voting controls etc. In this example I will show how to insert multiple records at one click and abstructing data from textfield.
First I have created two tables in database for voting system and created default.aspx page like below –
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> � <title>Untitled Page</title> </head> <body> <form id="form1"> <div> <div style="text-align: left;"><span style="font-size: 30px; color: #3333ff; font-family: Verdana;"><strong><span style="color: #990000;">Add a new poll</span> </strong></span></div> </div> <div style="text-align: left;"> <table> <tbody> <tr> <td style="width: 100px;" valign="top"></td> <td style="width: 100px;"></td> </tr> <tr> <td style="width: 100px;" valign="top"></td> <td style="width: 100px;"></td> </tr> <tr> <td style="width: 100px;"></td> <td style="width: 100px; text-align: center;"></td> </tr> </tbody> </table> </div> </form> </body>
Here is the code for the default.aspx page. I have included an onClick event to process the request.
Imports System.Data
Imports System.Data.SqlClient
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub btnUpdatePoll_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpdatePoll.Click
Try
' Adds the question
addPollQuestion()
' adds the options
Dim strOptions() As String = txtOptions.Text.Split(vbCrLf)
For Each strOption As String In strOptions
addPollOptions(strOption)
Next
Catch ex As Exception
Throw ex
End Try
End Sub
Private Sub addPollQuestion()
Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConnectionString").ToString()
Dim sqlConn As New SqlConnection(strConnString)
sqlConn.Open()
Dim sqlCmd As New SqlCommand()
sqlCmd.CommandText = "NewPoll"
sqlCmd.CommandType = Data.CommandType.StoredProcedure
sqlCmd.Connection = sqlConn
' Creation parameters
Dim sqlParamQuestion As New SqlParameter("@v_Question", Data.SqlDbType.VarChar)
sqlParamQuestion.Value = txtQuestion.Text
sqlCmd.Parameters.Add(sqlParamQuestion)
' Execute stored procedure
sqlCmd.ExecuteNonQuery()
' Close connection
sqlConn.Close()
End Sub
Private Sub addPollOptions(ByVal strOption As String)
Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConnectionString").ToString()
Dim sqlConn As New SqlConnection(strConnString)
sqlConn.Open()
Dim sqlCmd As New SqlCommand()
sqlCmd.CommandText = "SetPollOption"
sqlCmd.CommandType = Data.CommandType.StoredProcedure
sqlCmd.Connection = sqlConn
' Creation parameters
Dim sqlParamOption As New SqlParameter("@v_option", Data.SqlDbType.VarChar)
sqlParamOption.Value = strOption
sqlCmd.Parameters.Add(sqlParamOption)
' Execute stored procedure
sqlCmd.ExecuteNonQuery()
' Close connection
sqlConn.Close()
End Sub
End Class
Here is the stored procedure I have used to insert new records into the SQL Server table.
ALTER PROCEDURE dbo.SetPollOption ( @v_option VARCHAR(100) ) AS -- FINDING THE ID OF THE NEW QUESTION DECLARE @i_NextPollOptionID INT, @i_PollId INT -- GETS THE ACTIVE POLL ID SELECT @i_PollId = PK_PollId FROM Polls WHERE Active = 1 -- INITIALISIG QUESTION ID SET @i_NextPollOptionID = 1 -- IF THERE ARE MORE POLLS, THEN SET THE QUESTION ID TO MAX ID + 1 IF ((SELECT COUNT(*) FROM PollOptions) > 0) BEGIN SET @i_NextPollOptionID = (SELECT MAX(PK_OptionId) + 1 FROM PollOptions) END -- INSERT THE NEW QUESTION IN THE TABLE POLLS INSERT INTO PollOptions (PK_OptionId, FK_PollId, Answer, Votes) VALUES (@i_NextPollOptionID, @i_PollId, @v_option, 0) RETURN
Now I have inserted new records into the table. Lets display them in another page. I have created a new page polls.aspx. The page got the following controls and code –
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Poll.aspx.vb" Inherits="Poll" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title></head> <body> <form id="form1" runat="server"> <div> <div> <div style="text-align: left"> <span style="font-size: 30px; color: #3333ff; font-family: Verdana"><strong><span style="color: #990000">Please take a vote...</span><br /> </strong></span> </div> </div> <div style="text-align: left"> <br /> <table width="100%"> <tr> <td style="width: 100px; border-top: thin solid;"> <asp:Label ID="lblPollQuestion" runat="server" Font-Bold="True" Font-Names="Verdana" Font-Size="10pt" ForeColor="#CC3333" Text="Poll Question" Width="500px"></asp:Label></td></tr> <tr> <td style="width: 100px"> <asp:RadioButtonList ID="rdoPollOptionList" runat="server" Font-Names="Verdana" Font-Size="9pt" ForeColor="#993300" Width="500px"> </asp:RadioButtonList></td> </tr> <tr> <td style="width: 100px; text-align: left"> <asp:Button ID="btnVote" runat="server" Text="Vote" Width="71px" /><br /> <br /> <asp:Label ID="lblError" runat="server" Font-Names="Verdana" Font-Size="Smaller" ForeColor="Red" Text="You cannot vote more than once..." Visible="False" Width="500px"></asp:Label></td> </tr> </table> </div> </div> </form> </body> </html>
Here is the code for polls.aspx page.
Imports System.Data
Imports System.Data.SqlClient
Partial Class Poll
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
DisplayPoll()
End If
End Sub
Private Sub DisplayPoll()
Try
Dim ds As DataSet = getActivePoll()
' Displays the poll
lblPollQuestion.Text = ds.Tables(0).Rows(0)("Question")
Dim i As Integer = 0
For Each dr As DataRow In ds.Tables(1).Rows
rdoPollOptionList.Items.Add(dr("Answer"))
rdoPollOptionList.Items(i).Value = dr("PK_OptionId")
rdoPollOptionList.SelectedIndex = 0
i = i + 1
Next
Catch ex As Exception
Throw ex
End Try
End Sub
Private Function getActivePoll() As DataSet
Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConnectionString").ToString()
Dim sqlConn As New SqlConnection(strConnString)
' Opens the connection
sqlConn.Open()
Dim sqlCmd As New SqlCommand()
sqlCmd.CommandText = "GetActivePoll"
sqlCmd.CommandType = Data.CommandType.StoredProcedure
sqlCmd.Connection = sqlConn
' Gets the dataset from the sp
Dim ds As New DataSet
Dim da As New SqlDataAdapter(sqlCmd)
' Execute stored procedure
da.Fill(ds)
' Close connection
sqlConn.Close()
Return ds
End Function
Protected Sub btnVote_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVote.Click
If Response.Cookies("Voted") Is Nothing Then
Response.Cookies("Voted").Value = "Voted"
Response.Cookies("Voted").Expires = DateTime.Now.AddDays(1)
lblError.Visible = False
' Checks if the user can still vote by using cookie
RecordVote()
Else
lblError.Visible = True
End If
End Sub
Private Sub RecordVote()
Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConnectionString").ToString()
Dim sqlConn As New SqlConnection(strConnString)
sqlConn.Open()
Dim sqlCmd As New SqlCommand()
sqlCmd.CommandText = "IncrementVote"
sqlCmd.CommandType = Data.CommandType.StoredProcedure
sqlCmd.Connection = sqlConn
' Creation parameters
Dim sqlParamQuestion As New SqlParameter("@i_OptionId", Data.SqlDbType.Int)
sqlParamQuestion.Value = rdoPollOptionList.SelectedValue
sqlCmd.Parameters.Add(sqlParamQuestion)
' Execute stored procedure
sqlCmd.ExecuteNonQuery()
' Close connection
sqlConn.Close()
End Sub
End Class
I have used a few more stored procedure to display data in the polls.aspx page.
create PROCEDURE dbo.GetActivePoll AS -- GETS THE ACTIVE QUESTION FROM THE POLL TABLE SELECT PK_PollId, Question FROM Polls WHERE Active = 1 -- GETS THE OPTIONS LINKED WITH THE ACTIVE POLL SELECT PK_OptionId, Answer, Votes FROM PollOptions WHERE Fk_PollId IN (SELECT PK_PollID FROM Polls WHERE Active = 1) RETURN
Hope this gives some idea about multiple data entry from a text field.
