1

わかりましたので、vb.netアプリケーションにMsアクセステーブルを追加してから、DBNull値を持つ列をテーブルに含むフィルターを作成しました。問題は、dbnull値を持つセルを持つフィルターに何かを書き始めるたびに、エラー

""" テーブル 'Parts' の列 'Postion' の値は DBNull です。 """

例外の詳細は """""""""""""""" です。

System.Data.StrongTypingException was unhandled by user code
  Message=The value for column 'Postion' in table 'Parts' is DBNull.
  Source=Erkat
  StackTrace:
       at Erkat.cutterprogDataSet.PartsRow.get_Postion() in C:\Users\Mina\Documents\Visual Studio 2010\Projects\Erkatpj\Erkat\cutterprogDataSet.Designer.vb:line 2634
  InnerException: System.InvalidCastException
       Message=Conversion from type 'DBNull' to type 'String' is not valid.
       Source=Microsoft.VisualBasic
       StackTrace:
            at Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Object Value)
            at Erkat.cutterprogDataSet.PartsRow.get_Postion() in C:\Users\Mina\Documents\Visual Studio 2010\Projects\Erkatpj\Erkat\cutterprogDataSet.Designer.vb:line 2632
       InnerException: 

""""""""""""""""""

私は解決策を見つけましたが、それは一時的なものにすぎません

デザイナーの AUTO GENERATED コードで

"""

   <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
     Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")>  _
    Public Property Postion() As String
        Get
            Try 
                Return CType(Me(Me.tableParts.PostionColumn),String)
            Catch e As Global.System.InvalidCastException
                Throw New Global.System.Data.StrongTypingException("The value for column 'Postion' in table 'Parts' is DBNull.", e)
            End Try
        End Get
        Set
            Me(Me.tableParts.PostionColumn) = value
        End Set
    End Property

""" に変更しました

""""""""""""""""""""

<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
         Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")>  _
        Public Property Postion() As String
            Get
                Try
                    If Convert.IsDBNull(Me(Me.tableParts.PostionColumn)) Then
                        Return Nothing
                    Else
                        Return CType(Me(Me.tableParts.PostionColumn), String)

                    End If

                Catch e As Global.System.InvalidCastException
                    Throw New Global.System.Data.StrongTypingException("The value for column 'Postion' in table 'Parts' is DBNull.", e)
                End Try
            End Get
            Set
                Me(Me.tableParts.PostionColumn) = value
            End Set
        End Property 

""""""""""""""""""""" しかし、その自動生成以来、それを削除して古いものを再び作成し続けます

誰か助けてください??

4

1 に答える 1

0

Public Property Postion() As Stringとして保存し、 if is notまたはObjectにキャストしStringます。PositionDBNull.ValueNothing

Public Property Postion() As Object
    Get
        Return Me(Me.tableParts.PostionColumn
    End Get
    Set
        Me(Me.tableParts.PostionColumn) = value
    End Set
End Property

使用法:

Dim pos as String
Dim obj as Object = Position
If Not (obj Is Nothing) And Not (obj = DBNull.Value) Then
  pos = CType(obj, String)
  ' Alternately:
  ' pos = CString(obj)
  ' Or:
  ' pos = obj.ToString()
Else
  pos = String.Empty
End If

私の VB はあまり良くないので、文法の問題がある場合はご容赦ください。

于 2012-08-28T21:17:33.037 に答える