我想将出售物品的数据存储到数据库中,我正在使用这个存储过程
ALTER proc [dbo].[StoredProd]
(@prdctName nvarchar(50),
@ordrdQnty int,
@ordrPrice money,
--@TrnId int,
--@OrdrId int,
@TrnDate datetime,
@TrnTotal money)
AS BEGIN TRANSACTION
INSERT INTO [OrderProduct]
([prdctName]
,[ordrdQnty]
,[ordrPrice])
VALUES
(@prdctName,
@ordrdQnty,
@ordrPrice )
--GETDATE() ),
if @@ERROR<>0 goto Err_
INSERT INTO [Transaction]
(/*[TrnId]
,[OrdrId],*/
[TrnDate]
,[TrnTotal])
VALUES
(/*@TrnId,
@OrdrId,*/
(SELECT CURRENT_TIMESTAMP),
@TrnTotal)
if @@ERROR<>0 goto Err_
commit tran
return 0
Err_:
rollback
return 1
enter code here这个C#代码
private void btnCount_Click(object sender, EventArgs e)
{
string conn = "server=.;uid=sa;pwd=123;database=PharmacyDB;";
SqlConnection con = new SqlConnection();
for (int i = 0; i < dgvSelectedItem.Rows.Count; i++)
{
SqlCommand cmd = new SqlCommand("storedP");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@prdctName", dgvSelectedItem.Rows[i].Cells[0].Value));
cmd.Parameters.Add(new SqlParameter("@ordrdQnty", dgvSelectedItem.Rows[i].Cells[2].Value));
cmd.Parameters.Add(new SqlParameter("@ordrPrice", dgvSelectedItem.Rows[i].Cells[3].Value));
con.ConnectionString = conn;
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}我有两个表,这个SP应该先存储OrderProduct表数据,然后填充事务表,它们之间的关系是多个订单到一个事务ID,但是出现了这个错误:
未提供的“System.Data.SqlClient.SqlException”类型的未处理异常出现在System.Data.dll附加信息中:过程或函数“storedP”期望参数“@TrnDate”。
发布于 2014-05-31 20:51:50
这太长了,不能发表评论。问题在于调用存储过程,而不是代码本身。存储过程具有以下定义:
ALTER proc [dbo].[StoredProd] (
@prdctName nvarchar(50),
@ordrdQnty int,
@ordrPrice money,
@TrnDate datetime,
@TrnTotal money
) . . .它需要五个参数,其中一个是@TrnDate (从位置上讲,这应该是第四个)。您似乎没有包含这个参数,而且存储过程调用本身有一个错误。
编辑:
如果希望@TrnDate默认为系统时间,则使用default
ALTER proc [dbo].[StoredProd] (
@prdctName nvarchar(50),
@ordrdQnty int,
@ordrPrice money,
@TrnDate datetime default getdate(),
@TrnTotal money
) . . .如果不希望它作为参数,则完全删除它。您可以在存储过程的主体中declare它:
declare @TrnDate datetime = getdate();https://stackoverflow.com/questions/23974405
复制相似问题