我使用代码文件为我的ASP.NET Web表单编写所有VB.NET。我的.aspx正在尝试使用表单中的用户输入在我的MSACCESS数据库表中创建记录。我的组织没有购买Visual Studio,因此我在NotePad ++中完成所有工作,并且没有真正的调试功能。
其中一个输入文本框要求提供日期,其预期输入将被验证为遵循" M / d / yyyy"。
每当我尝试修改或调整我的代码以使其工作时,我总是会出现相同的错误:" System.FormatException:字符串未被识别为有效的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)
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 :(得分:0)
我无法重现您的问题,但我制作的样本可能可以帮助您找到问题所在。在您的帖子中不清楚您正在使用什么数据提供程序以及Task,DateAdded和DateDue的输入值是什么。
使用您的代码作为起点,我创建了一个Microsoft Access数据库,其Tasks
表定义如下:
Task
,DateAdded
和DateDue
也都设置为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。