【问题标题】:VBA strip string of double quotes when passed to stored procedure传递给存储过程时,VBA去除双引号字符串
【发布时间】:2021-08-03 08:03:06
【问题描述】:

我正在尝试更新数据库中表中的一行,其数据类型为:date。 我正在使用存储过程,并且正在从 TextBox 中检索要更新的值作为字符串。我的问题是一个字符串有双引号(“),当我在字符串中传递我的值时,它会保留双引号,而 SQL-Server 只支持单引号('')。

        intIndividualSessionID = Me.IndividualSession_ListBox.Column(1)
        sessionDate = Me.DateTextBox.Value
        startTime = Me.StartTimeTextBox.Value
        endTime = Me.EndTimeTextBox.Value
    
        'Setup ADO objects to run stored procedure
        Set cn = New ADODB.Connection
        cn.Open strCon
        Set cmd = New ADODB.Command
        With cmd
                .ActiveConnection = cn
            .CommandType = adCmdText
        
            'Create string to include parameters
            CommandText = "Exec UpdateIndividualSession " & intClientID & "," & intIndividualSessionID & "," & "sessionDate" & "," & "startTime" & "," & "endTime" & ";"
            .CommandTimeout = 0
            .Execute
        End With

这在我运行时给了我一个错误。

将数据类型 nvarchar 转换为日期时出错。”

【问题讨论】:

  • MySQL 还是 SQL Server?如果您使用参数,您可以解决所有这些问题,并使您的代码更安全。
  • mysql 没有 exec 语句,它使用 call 语句来执行存储过程,并且 mysql 可以将 nvarchar 理解为别名,但永远不会在错误消息中引用 nvarchar。这意味着您使用的是 ms sql server,而不是 mysql。您应该使用参数,而不是字符串连接将参数传递给 sql 语句。
  • @Shadow 哦,我的意思是 SQL-Server,我的错误,但我明白了,这不是一个实时数据库,只是我为学校项目工作的东西,我认为我采取了简单的路线,但它给我带来的问题多于帮助。

标签: sql-server excel vba


【解决方案1】:

您应该使用 Parameter 对象,而不是连接字符串 - 您传递的是文字值 sessionDate,而不是您的本地 sessionDate 变量的值。

SQL Server 使用单引号来分隔字符串,所以我不确定您为什么在这里使用双引号,您可以将它们加倍以转义它们,但不让您远离那个方向是不明智的。

CommandType 设为adCmdStoredProcCommandText 应该只是存储过程的名称 - 然后使用Command 对象创建并附加Parameters

.CommandType = adCmdStoredProc
.CommandText = "UpdateIndividualSession"
.Parameters.Append .CreateParameter(...)
.Parameters.Append .CreateParameter(...)
.Parameters.Append .CreateParameter(...)
.Parameters.Append .CreateParameter(...)
.Execute

这就是使用Command 和存储过程的美妙之处:现在处理参数值是服务器的工作,没有分隔符会妨碍。

确保使用Dim sessionDate As Date 声明sessionDate,并考虑使用显式转换函数而不是直接赋值,但总体思路是为adDate 服务器参数发送Date 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多