向 Access 数据库发送数据时出错

Posted

技术标签:

【中文标题】向 Access 数据库发送数据时出错【英文标题】:Error sending data to the Access Database 【发布时间】:2021-03-12 00:44:32 【问题描述】:

当我尝试将代码发送到 Access 数据库时出现此异常:

System.Data.OleDb.OleDbException (0x80040E07):选择条件表达式中的数据类型不匹配

在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象和执行结果) 在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和执行结果) 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法) 在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 在 C:\Users\booku\source\repos\KPIZ\KPIZ\Form2.cs:line 110 中的 KPIZ.Form2.btn_save_Click(Object sender, EventArgs e)

我的代码:

private void btn_save_Click(object sender, EventArgs e)

        try
        
            byte[] imageBt = null;
            FileStream fstream = new FileStream(this.textBox2.Text, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fstream);
            imageBt = br.ReadBytes((int)fstream.Length);

            connection.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = @"INSERT INTO [SportInfo]([ID],[FirstName],[LastName],[DOB],[Sport],[DIW],[Image])" + "VALUES(@id, @Fn, @Ln, @Date, @Sports, @days ,@IMG)";
            
            command.Parameters.Add(new OleDbParameter("@Fn", Convert.ToString(txt_fname.Text)));
            command.Parameters.Add(new OleDbParameter("@Ln", Convert.ToString(txt_lname.Text)));
            command.Parameters.Add(new OleDbParameter("@Date", Convert.ToString(mtxt_dob.Text)));
            command.Parameters.Add(new OleDbParameter("@Sports", Convert.ToString(txt_sport.Text)));
            command.Parameters.Add(new OleDbParameter("@days", Convert.ToInt32(nmc_diw.Text)));
            command.Parameters.Add(new OleDbParameter("@id", Convert.ToInt32(txt_id.Text)));
            command.Parameters.Add(new OleDbParameter("@IMG", imageBt));

            command.ExecuteNonQuery();

            MessageBox.Show("Data Saved");
            connection.Close();
        
        catch (Exception ex)
        
            MessageBox.Show("Unlucky  " + ex);
            connection.Close();
        

        try
        
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string query = "select ID,LastName,FirstName,DOB,Sport,DIW, from SportInfo ";
            command.CommandText = query;

            OleDbDataAdapter da = new OleDbDataAdapter(command);
            dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;

            connection.Close();
        

【问题讨论】:

插入命令或选择命令是否出错? 据我所知插入命令,它没有给我“已保存”消息框 你的数据库中 Date 的类型是什么? 这能回答你的问题吗? Insert DateTime into Access 【参考方案1】:

OLEDB 参数始终是位置参数。这意味着查询中的参数顺序需要与添加到代码中的参数顺序相匹配。

另外,您需要将日期参数添加为日期,而不是字符串。

调整您的参数顺序以匹配:

        command.Parameters.Add(new OleDbParameter("@id", Convert.ToInt32(txt_id.Text)));
        command.Parameters.Add(new OleDbParameter("@Fn", Convert.ToString(txt_fname.Text)));
        command.Parameters.Add(new OleDbParameter("@Ln", Convert.ToString(txt_lname.Text)));
        command.Parameters.Add(new OleDbParameter("@Date", DateTime.Parse(mtxt_dob.Text)));
        command.Parameters.Add(new OleDbParameter("@Sports", Convert.ToString(txt_sport.Text)));
        command.Parameters.Add(new OleDbParameter("@days", Convert.ToInt32(nmc_diw.Text)));
        command.Parameters.Add(new OleDbParameter("@IMG", imageBt));

如果顺序不匹配,您会收到很多错误,因为现在您正尝试在日期列或整数列中插入文本字段。

【讨论】:

以上是关于向 Access 数据库发送数据时出错的主要内容,如果未能解决你的问题,请参考以下文章

通过 Outlook 向 Access 报告的特定页面发送电子邮件

如果 Access 与 MySQL 数据库服务器断开连接,如何刷新链接表?

通过 Socket TCP/IP 发送数据时出错

Firefox 不向服务器发送 POST 数据

向 ROBLOX API 发送 https 请求时出错

Socket.io 向套接字发送消息时出错