2016-07-29 8 views
0

オブジェクト変数を宣言するコードがあります。この変数には、既存のデータベースフィールドの値が割り当てられています。文字列形式のSQL datetime

Dim datestart As Object 
datestart = dbToDate(dr("DateStart")) 

変数は、NULLかどうかをチェックしてdatetimeデータ型に変換する関数に渡されます。

 Public Shared Function dbToDate(o As Object) As DateTime 

    If o Is DBNull.Value Then 
     Return Nothing 

    Else 
     Return Convert.ToDateTime(o) 

    End If 
End Function 

私はそれを行う必要がある最後の事は、私は新しいデータベースに挿入できるように、文字列、DD/MM/YYYYを、フォーマットされた日付に変換されます。私がこれまで持って

機能は、私は、コードを実行すると、私は次のエラーメッセージを取得する、しかし

Public Shared Function sqlDate(dt As DateTime) As String 

    Return "'" & Format(dt, "yyyyMMdd") & "'" 

End Function 

ある

datetimeデータにvarcharデータ型の変換タイプが範囲外の値になりました。

なぜ、これを修正しますか?

+0

DateStart列のテーブル内の値を確認してください。 1つ以上の行に、c#DateTime型で指定された範囲外の値が含まれています。 –

+0

@TheShooterこれはvb.netではなく、C# –

+0

です。申し訳ありませんが、言語に注意するのを忘れていましたが、言語は無関係です。すべての.net言語の根底にあるデータ型は同じです。 datestart = dbToDate(dr( "DateStart"))文にブレークポイントを設定し、dr( "DateStart")の値をチェックし、DateTime.MixとDateTime.Maxの間にあるかどうかを確認します。あるいは、DateTime.MinとDateTime.Maxの値を書き留め、この範囲外の値を持つ行をsqlテーブルで検索します。 –

答えて

0

単に、toString機能を使用することができます。あなたのタイムゾーンもチェックしてください。問題は、タイムゾーンの設定にある可能性があります。

は、変数日時ではなく、文字列、あなたの参考のために

Public Shared Function sqlDate(dt As DateTime) As String 

    Return dt.toString("yyyy-MM-dd") 

End Function 

として日付を渡すようにしてください、あなたは、データベースに文字列として日付を渡しているホープ:https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

+0

はデータベースの挿入コードを表示できますか? – Sankar

+0

申し訳ありませんサンカール、私の間違いは、私は文字列の最後にhhmmss ttを追加したからです。しかし、私の日付の1つはnullで、dbToDate(質問参照)という関数では、 'Nothing'を返す代わりに12:00:00 AMを返すので、この関数はデータベースに挿入できません。これをどのように動作させるには? –

+0

@joe したがって、時間を日付と連結しています。右? – Sankar