【问题标题】:Cannot find the Nvarchar to Int conversion in my code在我的代码中找不到 Nvarchar 到 Int 的转换
【发布时间】:2017-03-19 07:52:03
【问题描述】:

我目前正在为学校制作一个项目,我必须制作一个可以在其中创建订单的程序。 当我尝试创建订单时,我收到此错误消息。

将数据类型 Nvarchar 转换为 Int 时出错。

如果这是一个很容易被发现的非常基本的问题,我很抱歉。我和我的项目成员都是初级程序员,但我们根本无法发现哪里出了问题。

我们在vba中执行的代码是这样的:

Set rs = DbConn.Execute("EXEC spOrderPlaatsen '" & Me.tbTijd & "', " & Me.klantnr & ", '" & Me.tbOphaaldatum & "', '" & Me.tbAfleverdatum & "', '" & Me.tbOphaaladres & "', " & Me.tbPalletnr & ", " & Me.tbAantalpallets & "")

这段代码执行的是我们的存储过程。 存储过程如下所示。

CREATE PROCEDURE spOrderPlaatsen
(  
@tijd               time(0),
@klantnr            integer,
@ophaaldatum        date,
@afleverdatum       date,

@palletnr   integer,
@aantal     integer,
@Adres      Varchar(255)

) 
AS 

BEGIN TRANSACTION 

DECLARE @ordernr int
DECLARE @besteldatum date

set @besteldatum = getdate()

SELECT @ordernr = MAX(o.ordernr) + 1 
FROM orders o 

insert into orders values (@ordernr, @besteldatum, @tijd, @klantnr, @ophaaldatum, @afleverdatum, @adres)
insert into orderregel values (@ordernr, @palletnr, @aantal)

IF @@ERROR <> 0 
BEGIN 

ROLLBACK 

RAISERROR ('Error tijdens het plaatsen van order.', 16, 1) 
RETURN 
END 

COMMIT
go

不知何故,我们得到了一个我们找不到的转换错误。

谁能帮我们解决这个问题?将不胜感激

【问题讨论】:

  • 这段代码看起来像 SQL Server,而不是 MS Access。请适当标记您的问题。
  • 对于 VBA 部分:Debug.Print 您的 SQL 语句,请参阅 How to debug dynamic SQL in VBA

标签: sql sql-server vba stored-procedures


【解决方案1】:

有多个地方可能会出错。这里有一些建议:

  1. 使用显式参数执行存储过程(参见here 示例)。不要永远只是将参数转储到查询字符串中。
  2. 始终列出insert 的列。因此,对于您包含的任何列,这应该是 insert into orders(col1, col2, col3, . . .)
  3. 使用identity 所以ordernr 由数据库自动计算。您可以使用INSERT 中的OUTPUT 子句获取该值。
  4. 同样,您可能希望besteldatum 默认为当前日期- 或不默认。我不确定这个列到底是什么,但默认值适合创建日期列。
  5. 将整个存储过程主体包围在自己的BEGIN/END 块中(不要依赖于BEGIN TRANSACTION

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多