获得系统的时间

时间:2014-05-31 20:44:11

标签: c# sql stored-procedures

我想将已售商品的数据存储到数据库中我正在使用此存储过程

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.dll中发生了未处理的“System.Data.SqlClient.SqlException”类型异常   附加信息:过程或函数'storedP'需要参数'@TrnDate',这是未提供的。

1 个答案:

答案 0 :(得分:1)

评论太长了。问题是你调用存储过程而不是代码本身。存储过程具有以下定义:

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();