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.