首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2014存储proc中带有SqlClient参数的非常奇怪的SmallDatetime错误

Server 2014存储proc中带有SqlClient参数的非常奇怪的SmallDatetime错误
EN

Stack Overflow用户
提问于 2015-10-08 18:21:10
回答 1查看 107关注 0票数 1

在过去的一个小时里,我一直被以下错误所困扰:

“过程或函数'write_call‘期望参数'@Date',这个参数没有提供。”

smalldatetime.是@date参数我正在尝试传递值#1/27/2009 04:32:00 PM#

我正在使用SQLExpress 2014。

同一存储的proc已在SQLExpress 2008上投入生产。

T存储的Proc:

代码语言:javascript
复制
 ALTER proc [dbo].[write_call]
(
    @Date smalldatetime, @Duration smallint, @Ring tinyint, @Extension smallint = null, @Number varchar(20) = null, @LineID smallint, 
    @AccountID smallint = null, @AccountName varchar(30) = null, @UnitID smallint = null, @UnitName varchar(30) = null, @AreaName varchar(100) = null, @CallType char(1) = null,
    @CallCode varchar(6) = null, @Rate numeric(5,2) = 0.0, @Cost numeric(12,2) = 0.0, @TAC varchar(10) = null
)

as

declare @id int=0, @old_acctid int=0  --, @old_rate numeric(5,2)=0.0, @old_cost numeric(12,2)=0.0

select @id=o.ID,@old_acctid=o.AccountID from OutboundCalls o where o.Date=@Date and o.Duration=@Duration and o.Number=@Number

if @id=0
    begin
        insert into _OutboundCalls (Date, Duration, Ring, Extension, Number, LineID, AccountID, AccountName, UnitID, UnitName, AreaName, CallType,CallCode, Rate, Cost, TAC,redirected,contactid,CompanyID,CompanyName)
        values (@Date, @Duration, @Ring, @Extension, @Number, @LineID, @AccountID, @AccountName, @UnitID, @UnitName, @AreaName, @CallType, @CallCode, @Rate, @Cost, @TAC,1,0,1,'PricewaterhouseCoopers')
    end
else if @id>0 and @old_acctid<>@AccountID
    update OutboundCalls set AccountID=@AccountID, UnitID=@UnitID,AccountName=@AccountName,UnitName=@UnitName
    where OutboundCalls.ID=@id

2015年VB.NET:

代码语言:javascript
复制
Private Sub write_call(c As CallInfo)
    Using cnn = New SqlClient.SqlConnection(connString)
        Using cmd = New SqlClient.SqlCommand("write_call", cnn)

            cmd.Parameters.AddWithValue("@Date", c.dt)
            cmd.Parameters.AddWithValue("@Duration", c.secDurn)
            cmd.Parameters.AddWithValue("@Ring", 0)
            cmd.Parameters.AddWithValue("@Extension", c.src)
            cmd.Parameters.AddWithValue("@Number", c.dst)
            cmd.Parameters.AddWithValue("@LineID", c.lineId)
            cmd.Parameters.AddWithValue("@AccountID", c.account_id)
            cmd.Parameters.AddWithValue("@AccountName", c.account_name)
            cmd.Parameters.AddWithValue("@UnitID", c.unit_id)
            cmd.Parameters.AddWithValue("@UnitName", c.unit_name)
            cmd.Parameters.AddWithValue("@AreaName", c.area?.Name)
            cmd.Parameters.AddWithValue("@CallType", c.dst_type)
            cmd.Parameters.AddWithValue("@CallCode", c.callcode)
            cmd.Parameters.AddWithValue("@Rate", c.rate?.rate)
            cmd.Parameters.AddWithValue("@Cost", c.Cost)
            cmd.Parameters.AddWithValue("@TAC", c._oC)

            cnn.Open()

            Try
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                Stop
            End Try
        End Using
    End Using
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 18:37:52

您的代码似乎没有设置CommandType属性。此属性默认为CommandType.Text,当您将sql字符串作为CommandText传递时,这是适当的。

如果传递存储过程的名称,则需要设置

代码语言:javascript
复制
cmd.CommandType = CommandType.StoredProcedure

如果没有此设置,SqlCommand的行为是不可预测的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33023220

复制
相关文章

相似问题

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