Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET中使用输出参数insert存储过程_C#_Asp.net_Stored Procedures_Sql Server 2012 - Fatal编程技术网

C# 如何在ASP.NET中使用输出参数insert存储过程

C# 如何在ASP.NET中使用输出参数insert存储过程,c#,asp.net,stored-procedures,sql-server-2012,C#,Asp.net,Stored Procedures,Sql Server 2012,我有如下的存储过程 ALTER PROCEDURE [dbo].[sp1] @mat NVARCHAR(1000) = NULL, @party NVARCHAR(1000) = NULL, @place NVARCHAR(1000) = NULL, @truk NVARCHAR(1000) = NULL, @qty NUMERIC(10) = NULL, @ptm NUMERIC(10) = NULL, @mop NVARCHAR(100

我有如下的存储过程

ALTER PROCEDURE [dbo].[sp1]
    @mat NVARCHAR(1000) = NULL,
    @party NVARCHAR(1000) = NULL,
    @place NVARCHAR(1000) = NULL,
    @truk NVARCHAR(1000) = NULL,
    @qty NUMERIC(10) = NULL,
    @ptm NUMERIC(10) = NULL,
    @mop NVARCHAR(100) = NULL,
    @tos NVARCHAR(100) = NULL,
    @driver NVARCHAR(100) = NULL,
    @date1 DATE = NULL
AS
BEGIN
    DECLARE @sql NVARCHAR(4000); 
    DECLARE @params NVARCHAR(4000); 
    DECLARE @rate NUMERIC(10); 

    SET @sql ='select  @rate = ['+@mat+']   from tblcos'+ ' where [Name] = @party' 
    set @params = '@party nvarchar (1000), @rate NVARCHAR(10) OUTPUT'  
    exec sp_executesql @sql, @params,@party= @party,@rate = @rate OUTPUT

    INSERT INTO tblsls([Party], [Place], [truk], [Material], [Qty], rate, [Amount], [Payment], [Balance], [MOP], [TOS], [driver], [Date]) 
        SELECT 
            @party, @place, @truk, @mat, @rate, @qty, (@qty * @rate),
            @ptm, (@qty * @rate - @ptm), @mop, @tos, @driver, @date1
END
我的
aspx.cs
文件

 protected void Button1_Click(object sender, EventArgs e)
 {
     SqlConnection con = new SqlConnection (@"
     Data Source = ABC - PC; Initial Catalog = VRA; Integrated Security = True");

     SqlCommand cmd = new SqlCommand("sp1", con);
     cmd.CommandType = CommandType.StoredProcedure;

     cmd.Parameters.AddWithValue("Date", Calendar1.SelectedDate);
     cmd.Parameters.AddWithValue("party", Ddprt.SelectedValue);
     cmd.Parameters.AddWithValue("Place", tbpls.Text);
     cmd.Parameters.AddWithValue("Truk", Tbtru.Text);
     cmd.Parameters.AddWithValue("Material", Ddmat.SelectedValue);
     cmd.Parameters.AddWithValue("Qty", Tbqty.Text);
     **cmd.Parameters.AddWithValue("Rate",         );**
     **cmd.Parameters.AddWithValue("Amount",          );**
     cmd.Parameters.AddWithValue("Payment", Tbptm.Text);
     **cmd.Parameters.AddWithValue("Balance",            );**
     cmd.Parameters.AddWithValue("MOP", Ddmop.SelectedValue);
     cmd.Parameters.AddWithValue("TOS", Ddtos.SelectedValue);
     cmd.Parameters.AddWithValue("driver", Tbdri.Text);

     con.Open();

     int k = cmd.ExecuteNonQuery();

     if (k != 0)
     {
         Lbmsg.Text = "Record inserted successfully into the database";
         Lbmsg.ForeColor = System.Drawing.Color.CornflowerBlue;
     }

     con.Close();
}

如何使
Rate
Amount
Balance
从存储过程
sp1
中获取值并更新值?

创建另一个过程,该过程接受
Rate
Amount
Balance
作为参数,并从web应用程序中调用该参数。这样,您就不会破坏现有的
sp1
的功能,但仍然拥有您需要的功能

我不太了解sql中的语法,但我认为它看起来像这样。如果错了,请有人改正

ALTER PROCEDURE [dbo].[sp1_fromWeb]
    @mat NVARCHAR(1000) = NULL,
    @party NVARCHAR(1000) = NULL,
    @place nvarchar(1000)=null,
    @truk nvarchar (1000)=null,
    @qty numeric (10)=null,
    @ptm numeric(10)=null,
    @mop nvarchar(100)=null,
    @tos nvarchar(100)=null,
    @driver nvarchar(100)=null,
    @date1 date = null,
    @rate numeric(10),
    @amount numeric(10),
    @balance numeric(10)
AS
BEGIN
    DECLARE @sql NVARCHAR(4000); 
    DECLARE @params NVARCHAR(4000); 

    SET @sql ='select  @rate = ['+@mat+']   from tblcos'+ ' where [Name] = @party' 
    set @params = '@party nvarchar (1000), @rate NVARCHAR(10) OUTPUT'  
    exec sp_executesql @sql, @params,@party= @party,@rate = @rate OUTPUT

    INSERT INTO tblsls([Party],[Place],[truk], [Material],[Qty], rate,[Amount],[Payment],[Balance],[MOP],[TOS],[driver],[Date]) 
        SELECT @party, @place, @truk, @mat, @qty, @rate, @amount, @ptm, @balance, @mop, @tos, @driver, @date1
END

我不明白这个问题。当你说“…并更新值”时,值是什么?当您可以直接选择值时,为什么要使用
sp_executesql
呢?是的,我正在使用sp_executesql,让我知道如何在存储过程中直接获取值我正在为10个参数提供值,而过程将更新13列的值,我想在asp.net web应用程序中执行同样的操作also@VinayAparanji然后从web应用程序调用该过程。。?就像你正在做的那样…?它不起作用,我想知道cmd.parameters.addwithvalues部分