得到系统的时间

本文关键字:时间 系统 | 更新日期: 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();