2016-02-18 69 views
1

语境:

我使用的CodeFile写我所有的VB.NET我的ASP.NET web表单。我的.aspx试图使用表单中的用户输入在我的MSACCESS数据库表中创建一条记录。我的组织尚未购买Visual Studio,因此我在NotePad ++中完成了所有工作,并且没有真正的调试功能。INSERT查询 - 日期时间参数去MSACCESS表不工作(ASP.NET)

问题:

之一的输入文本框要求输入日期,预期输入其中将被验证遵循“M/d/YYYY”。

每当我尝试修改或调整我的代码以使其起作用时,我总是出现相同的错误:“System.FormatException:String未被识别为有效的DateTime。”

任何帮助将大大赞赏!!

存在问题的部分:

我要指出,任何问题,我这个代码中找到同样适用于其他日期字段我使用收集“到期日”,你可能会在完整的代码部分中看到。

Dim prmAdded as OleDbParameter = New OleDbParameter("@DateAdded",OleDbType.DBDate) 
    dt = DateTime.ParseExact(newDateAdded.value,"M/d/yyyy", provider) 
    prmAdded.Value = dt 
    cmd.Parameters.Add(prmAdded) 

注:

  • 我爆发了从ParseExact Date对象自身的变量, 'DT',而不是直接放置到 'prmAdded.value' 用于调试 目的。
  • 我试过其他几种OleDbtypes,它们产生了同样的错误。
  • 我已经看过其他类似的帖子,并尝试这些解决方案,但我仍然得到相同的错误。

全码:

Protected Sub AddTask_Click(ByVal sender As Object, ByVal e As EventArgs) 

    con.Open() 
    Dim strSQL as string, dt as DateTime, provider as CultureInfo = CultureInfo.InvariantCulture 

    strSQL = "INSERT INTO Tasks(Task, DateAdded, DateDue)" _ 
    & "VALUES (@Task,@DateAdded,@DateDue)" 

    Dim cmd As New OleDbCommand(strSQL, con) 

    cmd.Parameters.Clear() 
    cmd.Parameters.AddWithValue("@Task", newTask.value) 

    Dim prmAdded as OleDbParameter = New OleDbParameter("@DateAdded",OleDbType.DBDate) 
    dt = DateTime.ParseExact(newDateAdded.value,"M/d/yyyy", provider) 
    prmAdded.Value = dt 
    cmd.Parameters.Add(prmAdded) 

    Dim prmDue as OleDbParameter = New OleDbParameter("@DateDue",OleDbType.Date) 
    dt = DateTime.ParseExact(newDueDate.value,"M/d/yyyy", provider) 
    prmDue.Value = dt 
    cmd.Parameters.Add(prmDue) 

    cmd.ExecuteNonQuery() 
    con.Close() 
+0

什么样的条目导致错误?问题是输入的文本与提供的格式相匹配,而不是'OleDbParameter' – Plutonix

+0

@Putonix我正在使用的输入错误的条目是来自类型=''的输入框的一串“2/17/2016”文字'在我的网页上。输入的ID ='newDateAdded'。 –

+2

哦btw ..检查这个免费的视觉工作室:https://www.visualstudio.com/support/legal/mt171547 –

回答

0

我无法重现你的问题,但是我制作的样品这或许可以帮助您找到您的问题。您在文章中不清楚您使用的数据提供程序以及Task,DateAdded和DateDue的输入值是什么。

使用你的代码作为一个起点,我创建了定义的Tasks表Microsoft Access数据库如下:

enter image description here

TaskDateAddedDateDue也都设置为Required

我的代码如下:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var task = new Task(); 
     task.AddTask("First One", "02/18/2016", "02/21/2016"); 
    } 
} 

internal class Task 
{ 
    private OleDbConnection _conn; 

    public Task() 
    { 
     _conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Temp\AccessSample\AccessSample\AppData\Database.accdb;"); 
    } 

    public bool AddTask(string task, string dateAdded, string dateDue) 
    { 
     _conn.Open(); 
     string strSQL = "INSERT INTO Tasks(Task, DateAdded, DateDue) VALUES (@Task,@DateAdded,@DateDue)"; 

     using (OleDbCommand cmd = new OleDbCommand(strSQL, _conn)) 
     { 
      cmd.Parameters.AddWithValue("@Task", task); 

      var dateAddedParam = new OleDbParameter("@DateAdded", OleDbType.DBDate); 
      var dt = DateTime.ParseExact(dateAdded, "M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture); 
      dateAddedParam.Value = dt; 
      cmd.Parameters.Add(dateAddedParam); 

      var dateDueParam = new OleDbParameter("@DateDue", OleDbType.DBDate); 
      dt = DateTime.ParseExact(dateDue, "M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture); 
      dateDueParam.Value = dt; 
      cmd.Parameters.Add(dateDueParam); 

      cmd.ExecuteNonQuery(); 
     } 

     _conn.Close(); 
     return true; 
    } 
} 

注意:我正在使用32位Provider = Microsoft.ACE.OLEDB.12.0,这意味着控制台应用程序被设置为编译为x86。