简体   繁体   English

使用输入输出存储过程进行数据插入

[英]data insert using input output stored procedure

I am creating a web application using ASP.net C#. 我正在使用ASP.net C#创建一个Web应用程序。 I have a booking form and I need to insert data into a table using a Stored Procedure. 我有一个预订表格,我需要使用存储过程将数据插入表中。 The table has several columns, out of which second column is a computed column. 该表有几列,其中第二列是计算列。 The Stored Procedure is set up to insert the data and fetch the value from the second column after insert. 设置存储过程以插入数据并在插入后从第二列中获取值。 Below is the code for Stored Procedure: 以下是存储过程的代码:

    Create Procedure sp_InsertCashPooja
@FirstName varchar(100),
@LastName varchar(100),
@TelNo bigint,
@Star char(50),
@Rasi char(50),
@Gothram char(50),
@PDMID int,
@PayMode bit,
@PujaName char(50),
@DonateAmt decimal(19,2),
@RcptNo varchar(25) output

as

Begin

SET NOCOUNT ON;

BEGIN TRY

BEGIN TRANSACTION

    if @PujaName != 'DONATION'
    Begin

        INSERT INTO PoojaDetails (FirstName, LastName, TelNo, Star, Rasi, Gothram, PoojaDietyMasterID, PayMode) values (@FirstName,@LastName,@TelNo,@Star,@Rasi,@Gothram,@PDMID,@PayMode)

    End

    if @PujaName = 'DONATION'
    Begin

        DECLARE @isDonate int = 0;

        INSERT INTO PoojaDetails (FirstName, LastName, TelNo, Star, Rasi, Gothram, PoojaDietyMasterID, PayMode, isDonate, DonateAmount) values (@FirstName,@LastName,@TelNo,@Star,@Rasi,@Gothram,@PDMID,@PayMode, @isDonate, @DonateAmt)

    End

    Select @RcptNo = max(ReceiptNo) from PoojaDetails
    Return @RcptNo
COMMIT TRANSACTION

END TRY

BEGIN CATCH
    IF (@@TRANCOUNT > 0)

    ROLLBACK TRANSACTION

END CATCH

SET NOCOUNT OFF;


End

I would like to insert data on the click of a button: I was able to figure out the below code.... 我想单击按钮插入数据:我能够找出以下代码。

 protected void btnSave_Click(object sender, EventArgs e)
        {


            frmFirstName = txtFirstName.Text.Trim().ToUpper();
            frmLastName = txtLastName.Text.Trim().ToUpper();
            frmPhoneNo = Convert.ToInt32(txtPhoneNo.Text.Trim());
            frmNakshatra = Convert.ToString(cmbNakshatra.SelectedItem).Trim();
            frmRasi = Convert.ToString(cmbRasi.SelectedItem).Trim();
            frmGothram = Convert.ToString(cmbGothram.SelectedItem).Trim();
            frmPujaName = Convert.ToString(cmbPujaName.SelectedItem).Trim();
using (SqlConnection connection = new SqlConnection())
        {
            if (frmPayMode == "Cash")
            {
                if (frmPujaName == "DONATION")
                {
                    SqlDataAdapter CashAdapter = new SqlDataAdapter();

                    CashAdapter.InsertCommand = new SqlCommand("sp_InsertCashPooja", connection);
                    CashAdapter.InsertCommand.CommandType = CommandType.StoredProcedure;

Please help.... I want to capture the returning RcptNo and later intend to call another ASPX page and pass the value using a Query String. 请帮助...。我想捕获返回的RcptNo,以后打算调用另一个ASPX页并使用查询字符串传递值。

Thanks 谢谢

Use simple SqlCommand for calling your SP 使用简单的SqlCommand调用您的SP

connection.Open();
var cmd = new SqlCommand("sp_InsertCashPooja", connection);
cmd.Parameters.AddWithValue("FirstName", frmFirstName);
// Add all the others parameters in same way
var id = (int)cmd.ExecuteScalar();
connection.Close();

Change the return variable to: 将返回变量更改为:

Select @RcptNo = SCOPE_IDENTITY()

It will return the identity number created for the inserted record within this procedure. 它将返回在此过程中为插入的记录创建的标识号。

use sql parameter.. 使用sql参数。

connection = ConfigurationManager.AppSettings["mycon"]; 连接= ConfigurationManager.AppSettings [“ mycon”];

        SqlParameter[] para = new SqlParameter[2];
        para[0] = new SqlParameter("@stored procedure column name", string name);
        para[1] = new SqlParameter("@stored procedure column name", string name);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM