以前我是用 new guid  但在这里就是转不过来,
从 System.String 到 System.Guid 的转换无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidCastException: 从 System.String 到 System.Guid 的转换无效。源错误: 
行 108:                '如果失败,则回滚 txn
行 109:                tran.Rollback()
行 110:                Throw e
行 111:            Finally
行 112:                '确保无论如何都关闭连接
 源文件: D:\wwwroot\WebDC\DNBB2N\dc_cjnTemp.vb    行: 110 堆栈跟踪: 
[InvalidCastException: 从 System.String 到 System.Guid 的转换无效。]
   WebDC.pubDataAcess.dc_cjnTemp.Update(DataTable dt) in D:\wwwroot\WebDC\DNBB2N\dc_cjnTemp.vb:110
   WebDC.fromVtemp.ButSave_Click(Object sender, EventArgs e) in D:\wwwroot\WebDC\fromVtemp.aspx.vb:83
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1277 
=========================================================================================源程序:
  Private Sub ButSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButSave.Click
        Dim i As Integer
        Dim dt As New DataTable()
        dt = Application("techsv")
        Dim dtW As New DataTable()
        dtW.Columns.Add("id")  ‘uniqueidentifier
        dtW.Columns.Add("dw")   ’char
        dtW.Columns.Add("edw")  ’char
        dtW.Columns.Add("cj")   ’char
        dtW.Columns.Add("xh")   ’char
        dtW.Columns.Add("nf")   ‘smallint        For i = 0 To dt.Rows.Count
            If CType(DataGrid1.Items(i).Cells(0).FindControl("chk1"), CheckBox).Checked = True Then
                Dim itemRow As DataRow = dtW.NewRow()
                                ' FillDataInDatarow(itemRow, i)
                If FillDataInDatarow(itemRow, i) = False Then
                    Exit Sub
                End If
                dtW.Rows.Add(itemRow)
                Dim updt As New dc_cjnTemp()
                Dim pubUpdt As pubDataAccess = updt
                pubUpdt.Update(dtW)
            End If        Next i
    End Sub
    Private Function FillDataInDatarow(ByRef itemrow As DataRow, ByVal index As Integer) As Boolean
        Dim dt As DataTable
        dt = Application("techsv")
        itemrow("id") = New Guid(dt.Rows(index).Item("id").ToString())    '
        itemrow("dw") = Trim$(DropQueryDW.SelectedItem.Text)
        itemrow("edw") = Trim$(DropQueryEDW.SelectedItem.Text)
        itemrow("cj") = Trim$(dt.Rows(index).Item("cj"))
        itemrow("xh") = Trim$(dt.Rows(index).Item("xh"))
        itemrow("nf") = Trim$(dt.Rows(index).Item("nf"))
        Return True
    End Function
=========================================================================== Private Sub buildInsertParams(ByVal workCommand As SqlCommand)
            Dim workParam As SqlParameter = Nothing            workParam = workCommand.Parameters.Add(New SqlParameter("@id", SqlDbType.UniqueIdentifier, 16))
            workParam.Direction = ParameterDirection.Input
            workParam.SourceColumn = "id"            workParam = workCommand.Parameters.Add(New SqlParameter("@dw", SqlDbType.Char, 40))
            workParam.Direction = ParameterDirection.Input
            workParam.SourceColumn = "dw"            workParam = workCommand.Parameters.Add(New SqlParameter("@edw", SqlDbType.Char, 40))
            workParam.Direction = ParameterDirection.Input
            workParam.SourceColumn = "edw"            workParam = workCommand.Parameters.Add(New SqlParameter("@CJ", SqlDbType.Char, 40))
            workParam.Direction = ParameterDirection.Input
            workParam.SourceColumn = "CJ"            workParam = workCommand.Parameters.Add(New SqlParameter("@Xh", SqlDbType.Char, 40))
            workParam.Direction = ParameterDirection.Input
            workParam.SourceColumn = "xh"            workParam = workCommand.Parameters.Add(New SqlParameter("@nf", SqlDbType.SmallInt, 2))
            workParam.Direction = ParameterDirection.Input
            workParam.SourceColumn = "nf"
        End Sub

解决方案 »

  1.   

    the error occurs earlier than line 110, make sure dt.Rows(index).Item("id").ToString())  is a GUID:Response.Write(dt.Rows(index).Item("id").ToString())   ' itemrow("id") = New Guid(dt.Rows(index).Item("id").ToString())    '
      

  2.   

    偶跟楼主遇到同样的问题,偶用textBox binding 后, 
    输入一串GUID(例如291FFECD-C4F3-4FCE-866F-95D600B74D9C), 
    光标移走时,这串GUID就没有了, 就象用TextBox binding 一个int的数据字段一样,当输入一个字符时,会自动清除这个字符,只能输入数字 偶用 “数据窗体向导”生成一个窗体时,居然也不能生成GUID字段的固定binging 
    期待高手:MS SQL 2000中 的 uniqueidentifier 类型,如何binding ? (C#)