0

カレンダー エクステンダーを使用して、Visual Studio 2010 内の ASP.NET のテキスト ボックスを拡張しています。イベントの日付を他の情報と共にデータベースに挿入しようとしています。データベースに挿入しようとすると、「条件式のデータ型が一致しません」というエラーが表示されます。

DateTime.ParseExact を使用して文字列の日付を Access Date/Time に変換しようとしましたが、まだ運がありません。

これが私のコードビハインドです:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim oleDbConn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    Dim SqlString As String = "Insert into Events(EventTitle,EventDescription,EventDate,EventCategory) Values (@f1,@f2,@f3,@f4)"
    Dim cmd As OleDbCommand = New OleDbCommand(SqlString, oleDbConn)

    cmd.CommandType = CommandType.Text
    cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
    cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
    cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
    CultureInfo.InvariantCulture))
    cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedValue)
    oleDbConn.Open()
    cmd.ExecuteNonQuery()
    System.Threading.Thread.Sleep("2000")
    Response.Redirect("~/calendar.aspx")
End Sub

これが私のASP.NETコードです(CalendarExtenderによってテキストボックスに挿入された日付を「dd/MM/yyyy」としてフォーマットしていることに注意してください):

 <asp:TextBox ID="tb_eventdate" runat="server" ToolTip="Enter a
 date"></asp:TextBox>
                <ajaxToolkit:CalendarExtender ID="tb_eventdate_CalendarExtender"  Format="dd/MM/yyyy" runat="server"

                    TargetControlID="tb_eventdate">
                </ajaxToolkit:CalendarExtender>

Access データベースのフィールドのタイプは「日付/時刻」です。

別の関数でデータベースから日付を取得して ToString に変換したため、この問題が発生する理由がわかりません。

    Function GetEventListing(selectedDay As DateTime) As DataTable
    '--read event listing for the given day from an Access query
    Dim con As OleDbConnection = GetConnection()
    Dim cmd As OleDbCommand = New OleDbCommand()
    cmd.Connection = con
    cmd.CommandText = String.Format("Select * from EventInfo Where EventDate >= #{0}# And EventDate < #{1}#", _
                                    selectedDay.ToString("dd/MM/yyyy"), _
                                    selectedDay.AddDays(1).ToString("dd/MM/yyyy"))
    Dim ds As DataSet = New DataSet()
    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    da.Fill(ds)
    con.Close()

    Return ds.Tables(0)
End Function

表示されるエラーの原因は何ですか?

4

1 に答える 1

3

たぶん、あなたを台無しにしているのは日付ではありません。DateTimeパラメータとして値を追加しているため(yyyy-mm-ddorとしてフォーマットされた文字列に変換された日付ではなく) 、おそらくエラーが発生していると思いましたがm/d/yyyy、C#で次のことを試してみましたが、うまくいきました...

static void Main(string[] args)
{
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Administrator\Desktop\Database1.accdb;");
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("INSERT INTO Events (EventName, EventDate) VALUES (?, ?)", conn);
    cmd.Parameters.AddWithValue("?", "TestEvent");
    cmd.Parameters.AddWithValue("?", (new DateTime(2013,3,21)));
    cmd.ExecuteNonQuery();
    conn.Close();

    Console.WriteLine("Done.");
}

...したがって、DateTime 解析が有効な DateTime 値を返している場合、クエリは機能するはずです。

失敗しているのが実際に SQL ステートメントの実行である場合、他に考えられるのはdd_eventcategory.SelectedValue. .ToString()おそらく、それは「d...」にする必要がありますか?

于 2013-04-10T16:35:00.990 に答える