【问题标题】:Update DateTime into sql db throws将 DateTime 更新为 sql db throws
【发布时间】:2011-05-31 13:11:31
【问题描述】:

我正在尝试将 DateTime 对象更新为 sql (SQL Server 2000) 数据库的日期时间字段。

我有以下功能

Public Sub Update(ByVal lastlogin as DateTime)

Using slqupdate as SqlCommand = _connection.CreateCommand()
  sqlupdate.CommandType = CommandType.Text
  sqlupdate.CommandText = "UPDATE myTable SET LastLogin = @lastlogin WHERE ID = 2"

  updatelastlogin = sqlupdate.CreateParameter()
  updatelastlogin.ParameterName = "@lastlogin"
  updatelastlogin.DbType = SqlDbType.DateTime
  updatelastlogin.Value = lastlogin
  slqlupdate.Parameters.Add(updatelastlogin)

  sqlupdate.ExecuteNonQuery()    
End Using
End Sub

尝试如下调用它 Update(DateTime.Now) 会产生以下异常:

转换参数值失败 将 DateTime 转换为小数。

我不知道我做错了什么,有人知道吗?

【问题讨论】:

    标签: sql-server vb.net datetime insert


    【解决方案1】:

    尝试使用 SQLDBType 而不是 DBType

    【讨论】:

    • 没问题。当我将您的示例移植到 c# 时,我很快就发现了问题。
    【解决方案2】:

    我在 Microsoft MSDN 上找到了这个:

    Private Sub UpdateDemographics(ByVal customerID As Integer, _
        ByVal demoXml As String, _
        ByVal connectionString As String)
    
        ' Update the demographics for a store, which is stored 
        ' in an xml column.
        Dim commandText As String = _
         "UPDATE Sales.Store SET Demographics = @demographics " _
         & "WHERE CustomerID = @ID;"
    
        Using connection As New SqlConnection(connectionString)
            Dim command As New SqlCommand(commandText, connection)
    
            ' Add CustomerID parameter for WHERE clause.
            command.Parameters.Add("@ID", SqlDbType.Int)
            command.Parameters("@ID").Value = customerID
    
            ' Use AddWithValue to assign Demographics.
            ' SQL Server will implicitly convert strings into XML.
            command.Parameters.AddWithValue("@demographics", demoXml)
    
            Try
                connection.Open()
                Dim rowsAffected As Integer = command.ExecuteNonQuery()
                Console.WriteLine("RowsAffected: {0}", rowsAffected)
    
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Using
    End Sub
    

    "command.Parameters.Add("@ID", SqlDbType.Int)" 部分应该是一个选项,说明它是一个日期时间参数?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2011-08-08
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      相关资源
      最近更新 更多