2017-12-16 74 views
1

私のアプリケーションには3つのテキストボックスがあります。第3のものは、あなたが空にしておくことができる誕生日のものである。asp.netのvb.netを使用してNULLをSQL Serverのdatetime列に割り当てます。

ユーザーが入力した値は、3列のテーブルを持つSQL Serverデータベースに保存されます。誕生日列のデータ型はDateに設定され、null可能と定義されています。

ユーザーが空の誕生日のテキストボックスを保持している場合、私はbirthdayカラムにNULLを割り当てたいので、私はこのコードを試してみました:

If txtBirthday.Text = "" Then 
    command.Parameters.AddWithValue("@Field3", DBNull.value) 
End If 

をしかし、それは動作しませんでした。私はまた、(Imports System.Data.SqlTypesを追加した後に)試してみました:

If txtBirthday.Text = "" Then 
    command.Parameters.AddWithValue("@Field3", SqlDateTime.Null) 
End If 

をしかし、それもうまくいきませんでした。

私は問題の解決策を探しましたが、成功しませんでした。

ここ

は私の完全なコードです助けてください:

Dim Query As String = "INSERT INTO UserInfo (fName, lName, bDay) VALUES (@Field1, @Field2, @Field3);" 
Dim connectionString = ConfigurationManager.ConnectionStrings("myapp_con_string").ConnectionString 
Using connection As New SqlConnection(connectionString) 
    Dim command As New SqlCommand(Query, connection) 
    With command 
     .Connection = connection 
     .CommandType = CommandType.Text 
     .CommandText = Query 
     .Parameters.AddWithValue("@Field1", txtFirstname.Text) 
     .Parameters.AddWithValue("@Field2", txtLastname.Text) 
     If txtBirthday.Text = "" Then 
      command.Parameters.AddWithValue("@Field3", DBNull.value) 
     Else 
      command.Parameters.AddWithValue("@Field3", Convert.ToDateTime(txtBirthdat.Text).ToString("yyyy/MM/dd")) 
     End If 
    End With 
    Try 
     connection.Open() 
     command.ExecuteNonQuery() 
     lblMessages.Text = "Data Saved" 
    Catch ex As SqlException 
     lblMessages.Text = "Data Not Saved" 
    End Try 
End Using 

これは私が得た例外です:

{System.Data.SqlClient.SqlError: Conversion failed when converting date and/or time from character string.}

+0

でNULLと解釈される場合

は今3番目のパラメータをバインドしないでください、それが動作するはずのように見えます。ストアドプロシージャまたはコマンドテキストを表示してください。 – N0Alias

+0

cmd.Parameters.Add( "@ Field3"、SqlDbType.Date).Value = DBNull.Value – Mary

+0

テキストボックスにマスクがありますか?それは本当に空ですか?空白であることを確認するためにスペースを置き換える値をトレースしてください – Ctznkane525

答えて

0

ストアドプロシージャを使用している場合は、以下を試してみてください。

は、デフォルトのパラメータ値

これは、
CREATE PROCEDURE 
(
@Name VARCHAR(50), 
@Email VARCHAR(255), 
@DOB DATE = NULL 
) 
AS 
BEGIN 
<Your Code> 
END 

を設定するには、SPのパラメータを変更します。 @Nameと@Emailは必須ですが、値を渡さないと@DOBはNULLになります。ユーザーは生年月日の値を入力していないと、それはSQL

+0

私はストアドプロシージャを使用していませんが、あなたのアプローチは、問題を解決するための良い方法です...私は空の日付フィールドを含めないSQLクエリを操作することができますし、クエリは、データベースのフィールドは、NULL値を保持します...私はそれを試してみると、私は答えに自分のコードを入れて動作します...ありがとう!!!! – Masarwa

関連する問題