2011-10-17 318 views
2

時轉換失敗我不知道如何將nvarchar值轉換爲int,但這是它需要設置的方式。我發現了其他職位,但我不知道如何在INSERT語句中使用CAST。我能找到的所有帖子都是關於在SELECT語句中轉換爲int的。我需要此語句將字段@Duration更改爲數據庫中的int。 @Duration是一段時間。 (01:00,02:00 ...)它們都會四捨五入到下一個int值。所以如果用戶輸入0:45,它應該被轉換爲1.有人能幫我弄清楚如何讓這個INSERT工作嗎?將nvarchar值'01:00'轉換爲數據類型int

'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() 
+0

並且希望該值什麼轉換爲int? 1? 100?因爲這不是一個整數! – gbianchi

+0

假設'txtDuration.Text'是一個TimeSpan,你想將它存儲爲小時,分鐘,秒,毫秒或什麼? –

+0

對不起,@Duration是一段時間,比如01:00,需要轉換爲1. 02:00轉換爲2,依此類推。 – jlg

回答

0

假設你想要一個TimeSpan轉換成int型,也假設你希望它是TotalHours屬性:

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

編輯:如果這其實是一個時間跨度,您的轉換將是錯誤因爲字符串「0:45」表示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

+0

這是完美的,非常感謝您的幫助! – jlg

+0

@jlg:很高興我能幫忙。編輯我的答案,並添加了'MidpointRounding.AwayFromZero',否則0:30將是0而不是1. –

+0

一個注意:你認爲它是用戶友好的,讓用戶進入'0:31',你只存儲1(小時)?!這是一種不切實際的信息丟失,你可以很容易地在前端進行整理,但保留精度並在需要時顯示。 –

相關問題