0

txtStartDate.TextとtxtEndDate.Textの2つのテキストボックスがあり、ユーザーはカレンダーの日付ピッカーで日付を選択します。次に、選択した2つの日付の間の日数をカウントし、その結果をデータベースフィールドtotalDay(整数型)に保存します。コードは次のとおりです。

しかし、ボタンをクリックしてデータベースに保存しようとすると、次のエラーが発生します。

使用中のSQLServerのバージョンは、データ型'time'をサポートしていません。

この問題を克服するにはどうすればよいですか?

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Threading
Imports System.Globalization

Partial Class addevent
Inherits System.Web.UI.Page

Protected Sub ButtonAddEvent_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonAddEvent.Click

    Dim connString As String = ConfigurationManager.ConnectionStrings("ConnectionString1").ConnectionString
    '"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\eventdb.mdf;Integrated Security=True;User Instance=True"
    Dim con As SqlConnection = New SqlConnection(connString)

    Dim cmdQuery As String = "INSERT INTO eventinfo(venue,totalDay,eventTitle,startDate,endDate,description) VALUES (@venue,@totalDay,@eventTitle,@startDate,@endDate,@description)"
    Dim cmd = New SqlCommand(cmdQuery)
    cmd.Connection = con
    cmd.CommandType = CommandType.Text
    con.Open()
    cmd.Parameters.AddWithValue("@eventTitle", txtEventTitle.Text)
    cmd.Parameters.AddWithValue("@venue", txtEventLocation.Text)
    cmd.Parameters.AddWithValue("@startDate", txtStartDate.Text)
    cmd.Parameters.AddWithValue("@endDate", txtEndDate.Text)
    cmd.Parameters.AddWithValue("@description", txtEventDescription.Text)

    Dim fmt As String = "dd/MM/yyyy"
    Dim dtStart As DateTime = DateTime.ParseExact(txtStartDate.Text, fmt, Nothing)
    Dim dtEnd As DateTime = DateTime.ParseExact(txtEndDate.Text, fmt, Nothing)

    Dim ts As TimeSpan = dtEnd - dtStart

    cmd.Parameters.AddWithValue("@totalDay", ts.TotalDays)


    cmd.ExecuteNonQuery()
    cmd.Parameters.Clear()
    con.Close()

    Response.Redirect("~/addbooth.aspx")

End Sub
End Class

私のテーブル構造: ここに画像の説明を入力してください

4

3 に答える 3

0

フィールドは整数型であり、時間コンポーネントなしでユーザーに日数の入力のみを許可するため、次のように機能する可能性があります。

cmd.Parameters.AddWithValue("@totalDay", ts.Days)

TimeSpan.TotalDaysは、日数と日数の端数を2倍として提供し、TimeSpan.Daysは1日のみを提供します。

于 2012-05-20T07:58:02.180 に答える
0

SQL DataBase Type 以下のように、SQL コマンド パラメータ リストにを追加してみてください。

サンプルコード

cmd.Parameters.Add("ParameterName", SqlDbType.Date).Value = "Value";

于 2012-05-20T08:00:35.733 に答える
0

これを使って:

Dim totalday As Integer = DateDiff(DateInterval.Day, <Date_1> , <Date_2>)
于 2012-05-20T08:04:59.790 に答える