【发布时间】:2019-05-28 10:46:47
【问题描述】:
我的存储过程如下:
ALTER PROCEDURE [dbo].[sp5]
@mat NVARCHAR(1000) = NULL,
@party NVARCHAR(1000) = NULL,
@place NVARCHAR(1000) = NULL,
@truk NVARCHAR(1000) = NULL,
@qty NVARCHAR(10) = NULL,
@ptm NVARCHAR(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 nvarchar(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,
[Payment], [MOP], [TOS], [driver], [Date])
SELECT
@party, @place, @truk, @mat, @qty, @rate,
@ptm, @mop, @tos, @driver, @date1
END
aspx.cs代码文件如下:
namespace crusoft
{
public partial class WebForm3 : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
string cs = ConfigurationManager.ConnectionStrings["VRAConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(cs);
SqlCommand cmd = new SqlCommand("sp5", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@date1", SqlDbType.Date).Value = Calendar1.SelectedDate.ToShortDateString();
cmd.Parameters.AddWithValue("@party", SqlDbType.NVarChar).Value = Ddprt.SelectedValue;
cmd.Parameters.AddWithValue("@place", SqlDbType.NVarChar).Value = tbpls.Text;
cmd.Parameters.AddWithValue("@truk", SqlDbType.NVarChar).Value = Tbtru.Text;
cmd.Parameters.AddWithValue("@mat", SqlDbType.NVarChar).Value = Ddmat.SelectedValue;
cmd.Parameters.AddWithValue("@qty", SqlDbType.SmallInt).Value = Tbqty.Text;
cmd.Parameters.Add("@rate", SqlDbType.NVarChar, 10);
cmd.Parameters["@rate"].Direction = ParameterDirection.Output;
cmd.Parameters.AddWithValue("@ptm", SqlDbType.NVarChar).Value = Tbptm.Text;
cmd.Parameters.AddWithValue("@mop", SqlDbType.NVarChar).Value = Ddmop.SelectedValue;
cmd.Parameters.AddWithValue("@tos", SqlDbType.NVarChar).Value = Ddtos.SelectedValue;
cmd.Parameters.AddWithValue("@driver", SqlDbType.NVarChar).Value = Tbdri.Text;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
当我运行程序时它会失败,当我在没有@rate 参数的情况下执行时,一切正常,但我想使用@rate 参数执行。
我确信存储过程工作正常。
【问题讨论】:
-
错误信息很容易解释,当 proc 只需要 10 个参数时,您尝试添加 11 个参数。
-
您的
sp5存储过程没有收到任何名为rate的参数。 -
您的过程没有名为@rate 的参数!!!!
-
“但我想使用@rate 参数执行” - 然后将您的存储过程更改为拥有一个
@rate参数。 -
@rate必须是参数,而不仅仅是过程内部的变量。还需要标记为OUTPUT。
标签: c# asp.net sql-server tsql stored-procedures