首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取系统时间

获取系统时间
EN

Stack Overflow用户
提问于 2014-05-31 20:44:11
回答 1查看 72关注 0票数 0

我想将出售物品的数据存储到数据库中,我正在使用这个存储过程

代码语言:javascript
复制
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#代码

代码语言:javascript
复制
  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”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-31 20:51:50

这太长了,不能发表评论。问题在于调用存储过程,而不是代码本身。存储过程具有以下定义:

代码语言:javascript
复制
ALTER proc [dbo].[StoredProd] (
    @prdctName nvarchar(50),
    @ordrdQnty int,
    @ordrPrice money,
    @TrnDate datetime,
    @TrnTotal money
) . . .

它需要五个参数,其中一个是@TrnDate (从位置上讲,这应该是第四个)。您似乎没有包含这个参数,而且存储过程调用本身有一个错误。

编辑:

如果希望@TrnDate默认为系统时间,则使用default

代码语言:javascript
复制
ALTER proc [dbo].[StoredProd] (
    @prdctName nvarchar(50),
    @ordrdQnty int,
    @ordrPrice money,
    @TrnDate datetime default getdate(),
    @TrnTotal money
) . . .

如果不希望它作为参数,则完全删除它。您可以在存储过程的主体中declare它:

代码语言:javascript
复制
declare @TrnDate datetime = getdate();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23974405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档