【问题标题】:Razor VB - Pass a Null value if a Request variable is emptyRazor VB - 如果请求变量为空,则传递 Null 值
【发布时间】:2013-01-12 01:15:27
【问题描述】:

我一直在努力寻找解决方案,但没有运气。我对 VB 和 SQL 还很陌生,但这应该不会太难。我继承了很多代码,没有太多空间可以更改 db 属性类型或任何东西。

我正在尝试使用 Razor 中的参数运行 UPDATE 查询,如下所示:

    Dim updateCommand = "UPDATE [tblJobRating] SET [ProjectManagement] = @0, [ProjComments] = @1, [Schedule] = @2, [SchedComments] = @3 WHERE [JobRatingID] = @4"

所有有问题的列都需要 INT 值,但我有一个例外,我需要传递一个空值(传递另一个数字或零是不行的)。本质上是用户的“N/A”值。

我从 Post 请求中分配变量,如下所示:

Dim projMgmt = Request.Form('projMgmt')
' ...
Dim sched = Request.Form('sched')

我有一个“N/A”值现在没有发布任何值(或者它可以是一个字符串,如果需要,我可以检查 IsNumber,我猜)。但是当我调用查询执行时,它输入的值为 0。

db.Execute(updateCommand, projMgmt, projComments, sched, schedComments, ratingId)

它需要为 NULL 值才能使后端正常工作。我尝试过类型检查和传递NothingSystem.Data.SqlTypes.SqlInt32.Null 等,但它要么给出转换错误,要么设置为0。我怎样才能正确传递它?

编辑:我省略了 db.Execute 方法中的第一个参数,传入了 updateCommand。为清晰起见进行了编辑。

【问题讨论】:

  • 您能否提供有关您的 db.Execute 方法的其他信息 - 我看起来并不熟悉。它接受哪些参数?
  • db.execute 命令使用占位符将值传递给 sql 语句(@0 = projMgmt,@1 = projComments...),并在 Razor 中用于防止 sql 注入。我忘了传入第一个参数,即它执行的 updateCommand。我现在编辑了。 asp.net/web-pages/tutorials/introducing-aspnet-web-pages-2/…

标签: sql vb.net sql-server-2005 razor


【解决方案1】:

问题出在您的 vb 变量定义中。我假设你有一个整数,它必须是一个可空的(整数)一直到 SQL。这也可以写成整数?。

【讨论】:

  • 我想我跟着。似乎整数的初始变量声明默认为 0 值,但将其声明为可为空的可以让我检查传入的数字并在需要时将其保持为空。但这与声明 Dim projMgmt = Nothing 有何不同,后者不起作用? msdn.microsoft.com/en-us/library/ms235245.aspx
  • 您正在使用隐式声明,这意味着您声明的变量与您分配给它的变量的类型相同。 VB 也会自动进行类型转换(C# 不会)。当你 Dim projMgmt = Nothing 时,你会得到一个对象类型的变量。使用您的代码中的那个,您将获得一个字符串类型(可能)。您的数据库正在尽其所能处理这些问题。暗淡 projMgmt 作为整数? = 没有什么能给你你所需要的。记住字符串 "" 与 Nothing 不同。
猜你喜欢
  • 2020-12-09
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多