得到系统的时间
本文关键字:时间 系统 | 更新日期: 2023-09-27 18:06:09
我想将销售项目的数据存储到数据库中,我使用这个存储过程
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();
}
我有2个表,这个SP应该首先存储OrderProduct表数据,然后填充Transaction表,它们之间的关系是许多订单到一个Transaction ID,但是出现了这个错误:
类型为"System.Data.SqlClient"的未处理异常。在System.Data.dll中发生SqlException'附加信息:过程或函数'storedP'期望参数'@TrnDate',该参数未提供。
这个注释太长了。问题在于您调用的存储过程,而不是代码本身。存储过程具有以下定义:
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();