将nvarchar值'01:00'转换为数据类型int时转换失败

时间:2011-10-17 19:21:34

标签: asp.net vb.net insert

我不知道如何将nvarchar值转换为int,但这就是它需要设置的方式。我找到了关于此的其他帖子,但我不知道如何在我拥有的INSERT语句中使用CAST。我能找到的所有帖子都是关于在SELECT语句中转换为int的。我需要这个语句来将字段@Duration更改为数据库中的int。 @Duration是一段时间。 (01:00,02:00 ......)他们都将四舍五入到下一个int值。因此,如果用户输入0:45,则应将其转换为1.有人可以帮我弄清楚如何让这个INSERT工作吗?

'SQL Insert: Product table
        Dim sqlInsertProduct As String = "INSERT INTO Product (ProductName, Status, 
                                         CreateDate, ModifyDate, CreateUser, 
                                         ModifyUser, Price, LaunchDate, Duration, 
                                         IsPublic, Presenter, Host, Broker) 

                                         VALUES (@ProductName, '1',getdate(),
                                         getdate(), @CreateUser, @ModifyUser,
                                         '0', @LaunchDate, @Duration, '1', 
                                         @Presenter, @Host, @Broker);
                                         SELECT SCOPE_IDENTITY();"
        Using cmd As New SqlCommand(sqlInsertProduct, cn)
            Dim ProductID As String
            cmd.Parameters.Add(New SqlParameter("@ProductName",
            txtNewWebinarName.Text))
            cmd.Parameters.Add(New SqlParameter("@CreateUser",
            System.Web.HttpContext.Current.User.Identity.Name))
            cmd.Parameters.Add(New SqlParameter("@ModifyUser",
            System.Web.HttpContext.Current.User.Identity.Name))
            cmd.Parameters.Add(New SqlParameter("@LaunchDate", txtDateTime.Text))
            cmd.Parameters.Add(New SqlParameter("@Duration", txtDuration.Text))
            cmd.Parameters.Add(New SqlParameter("@Presenter", txtPresenter.Text))
            cmd.Parameters.Add(New SqlParameter("@Host", txtHost.Text))
            cmd.Parameters.Add(New SqlParameter("@Broker", txtBroker.Text))
            cn.Open()
            ProductID = cmd.ExecuteScalar()
            Session("ProductID") = ProductID
            Dim Product As String = Session("ProductID")
        End Using
        cn.Close()

1 个答案:

答案 0 :(得分:0)

假设您要将TimeSpan转换为int,同时假设您需要TotalHours属性:

Dim ts As TimeSpan = TimeSpan.Parse(txtDuration.Text) 
cmd.Parameters.Add(New SqlParameter("@Duration", ts.TotalHours))

编辑:如果这实际上是TimeSpan,您的转换将是错误的,因为字符串“0:45”表示TimeSpan为0.75小时(45分钟为3/4小时)

这应该正确地进行舍入:

Dim hours As Integer = _
       CInt(Math.Round(ts.TotalHours, MidpointRounding.AwayFromZero))

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx