从文本框插入值时出现问题

时间:2010-04-28 16:10:39

标签: c# date

我正在尝试将当前日期插入到数据库中,并且我总是得到消息(当我按下表单上的按钮以保存到我的访问数据库时),数据类型在条件表达式中是incorect。 代码:

string conString = "Provider=Microsoft.Jet.OLEDB.4.0;"
         + "Data Source=C:\\Users\\Simon\\Desktop\\save.mdb";

            OleDbConnection empConnection = new OleDbConnection(conString);


            string insertStatement = "INSERT INTO obroki_save "
                                 + "([ID_uporabnika],[ID_zivila],[skupaj_kalorij]) "
                                 + "VALUES (@ID_uporabnika,@ID_zivila,@skupaj_kalorij)";

            OleDbCommand insertCommand = new OleDbCommand(insertStatement, empConnection);

            insertCommand.Parameters.Add("@ID_uporabnika", OleDbType.Char).Value = users.iDTextBox.Text;
                            insertCommand.Parameters.Add("@ID_zivila", OleDbType.Char).Value = iDTextBox.Text;
            insertCommand.Parameters.Add("@skupaj_kalorij", OleDbType.Char).Value = textBox1.Text;
            empConnection.Open();

            try
            {
               int count = insertCommand.ExecuteNonQuery();
            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                empConnection.Close();
                textBox1.Clear();
                textBox2.Clear();
                textBox3.Clear();
                textBox4.Clear();
                textBox5.Clear();
            }

我现在已经删除了日期,(我将访问粘贴日期),仍然存在同样的问题。第一行好吗? users.idtextbox.text? 请帮忙!

6 个答案:

答案 0 :(得分:2)

尝试更改

insertCommand.Parameters.Add("@datum", OleDbType.Char).Value = DateTime.Now;

 `insertCommand.Parameters.Add("@datum", OleDbType.Char).Value 
      = DateTime.Now.ToString("dd MMM yyyy HH:mm");`

(或其他一些可接受的日期格式)

答案 1 :(得分:0)

假设您的数据库实际上为日期列保存日期而不是字符串 - 我认为您正在尝试将char值插入日期列。

更改

insertCommand.Parameters.Add("@datum", OleDbType.Char).Value = DateTime.Now;

insertCommand.Parameters.Add("@datum", OleDbType.Date).Value = DateTime.Now;

答案 2 :(得分:0)

您应该在参数中使用类型OleDbType.Date。它映射到.NET中的DateTime值和数据库中的OLE日期(内部表示为double)。这就是Access用于存储日期的内容。

使用OleDbType中的任何其他日期格式,它将转换为Access无法识别为日期的字符串表示。

如果您使用OleDbType.CharDateTime值将使用.NET中的当前文化转换为字符串,Access可能会或可能不会理解该字符串,具体取决于文化恰好是什么。在你的情况下,它似乎不被理解。

答案 3 :(得分:0)

由于您在区域设置中设置的日期格式以及MS Access接受的日期格式,我认为您遇到了问题。

您可以使用以下代码中提到的特定日期格式。

 DateTimeFormatInfo ukDTFomat = new CultureInfo("en-GB", false).DateTimeFormat;
 DateTime.Now.ToString("yyyy-MM-dd", ukDTFomat);

答案 4 :(得分:0)

您可以通过添加以下参数来简化OleDb的使用:

OleDbParameter param = new OleDbParameter("@datum", DateTime.Now);
command.Parameters.Add(param);

这使用了OleDbParameter的覆盖,它接受一个字符串(参数名称)和一个对象(无论参数的值是什么)。 这让OleDb为您找出正确的参数类型(并为您节省大量输入和更改参数类型的工作)。

更新:刚才注意到这是Jet。对于Access,所有的赌注都是关闭的,所以我不确定上述内容是否有效。

答案 5 :(得分:0)

您确定问题是日期值吗?是,其他列真的是Char类型的吗?对于日期值,您应该使用OleDbType.DBDate,但您还应该为其他列使用适当的类型。

修改 对具有日期列的Access数据库进行了测试,以下工作(尽管明显剥离了时间):

cmd.Parameters.Add( "@DateColumn", OleDbType.DBDate ).Value = DateTime.Now;

以及(其中包括时间)

cmd.Parameters.Add( "@TestDate", OleDbType.Date ).Value = DateTime.Now;

编辑与日期参数一样,您应该为其他值传递特定类型:

insertCommand.Parameters.Add("@ID_uporabnika", OleDbType.Integer).Value = int.Parse( users.iDTextBox.Text );
insertCommand.Parameters.Add("@ID_zivila", OleDbType.Integer.Value = int.Parse( iDTextBox.Text );
insertCommand.Parameters.Add("@skupaj_kalorij", OleDbType.Integer).Value = int.Parse( textBox1.Text );