Database
I have made use of the following table Customers with the schema as follows.
Note: You can download the database table SQL by clicking the download link below.
Stored Procedure
This
Stored Procedure accepts following parameters which are used to
insert the records:
Name – This is an INPUT Parameter to pass the Name of the Customer.
Country – This is an INPUT Parameter to pass the Country of the Customer.
CustomerId - This is an OUTPUT Parameter to get the last inserted CustomerId.
Note: Output Parameter is identified by the keyword OUTPUT.
CREATE PROCEDURE [Customer_InsertCustomer_Output]
@Name VARCHAR(100),
@Country VARCHAR(50),
@CustomerId INT OUTPUT
AS
BEGIN
INSERT INTO [Customers]
([Name]
,[Country])
VALUES
(@Name
,@Country)
SELECT @CustomerId = SCOPE_IDENTITY()
END
Form Design
The following Form consists of:
Label – For labelling controls.
TextBox – For capturing Name to be inserted.
ComboBox – For capturing Country Name to be inserted.
Button – For inserting records.
The Button has been assigned with a Click event handler.
Adding ConnectionString to the App.Config file
You need to add the Connection String in the
ConnectionStrings section of the
App.Config file in the following way.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="constr" connectionString="Data Source=.\SQL2019;Initial Catalog=AjaxSamples;Integrated Security=true" />
</connectionStrings>
</configuration>
Namespace
You will need to import the following namespaces.
C#
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
VB.Net
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Inserting record into the Database using Stored Procedure in Windows Forms
Inside the
Form Load event handler, the
ComboBox items are added.
When
Insert button is clicked, the connection string is fetched from the
App.Config file and an object of
SqlConnection class is created using it.
Then, an object of SqlCommand class is created and the INSERT query is passed to it as parameter.
The values of the Name and Country are added as parameter to SqlCommand object.
Next, the Output Parameter i.e. CustomerId is added as parameter to SqlCommand class object with its Data Type and the Direction is set to Output since by default the Direction of all Parameter is Input.
Then, the connection is opened and the ExecuteNonQuery function is executed.
Once the
Stored Procedure is executed, the value of the
CustomerId of the inserted record is fetched from the
Value property of the
CustomerId Output Parameter.
Finally, the
TextBox and
ComboBox values are set to empty and
CustomerId of the inserted record is displayed in
MessageBox.
C#
private void Form1_Load(object sender, EventArgs e)
{
cbCountries.Items.Add("Please Select");
cbCountries.Items.Add("United States");
cbCountries.Items.Add("India");
cbCountries.Items.Add("France");
cbCountries.Items.Add("Russia");
}
private void OnInsert(object sender, EventArgs e)
{
string spName = "Customer_InsertCustomer_Output";
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(spName))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.Parameters.AddWithValue("@Country", cbCountries.SelectedItem);
cmd.Parameters.Add("@CustomerId", SqlDbType.Int);
cmd.Parameters["@CustomerId"].Direction = ParameterDirection.Output;
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
string customerId = Convert.ToString(cmd.Parameters["@CustomerId"].Value);
txtName.Text = string.Empty;
cbCountries.Text = string.Empty;
MessageBox.Show("Inserted Customer ID: " + customerId);
}
}
}
VB.Net
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cbCountries.Items.Add("Please Select")
cbCountries.Items.Add("United States")
cbCountries.Items.Add("India")
cbCountries.Items.Add("France")
cbCountries.Items.Add("Russia")
End Sub
Private Sub OnInsert(ByVal sender As Object, ByVal e As EventArgs) Handles btnInsert.Click
Dim spName As String = "Customer_InsertCustomer_Output"
Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using con As SqlConnection = New SqlConnection(constr)
Using cmd As SqlCommand = New SqlCommand(spName)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@Name", txtName.Text)
cmd.Parameters.AddWithValue("@Country", cbCountries.SelectedItem)
cmd.Parameters.Add("@CustomerId", SqlDbType.Int)
cmd.Parameters("@CustomerId").Direction = ParameterDirection.Output
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Dim customerId As String = Convert.ToString(cmd.Parameters("@CustomerId").Value)
txtName.Text = String.Empty
cbCountries.Text = String.Empty
MessageBox.Show("Inserted Customer ID: " & customerId)
End Using
End Using
End Sub
Screenshots
Record after Insert in database
Downloads