c# - 使用 C# 使用 CSV 文件填充 DataGridView,并使用结果更新 Access 数据库

标签 c# database ms-access datagridview

我有一个与 Access 数据库 (accdb) 交互的 C# Windows 窗体项目。我有一种可以很好地读取数据库并将其显示到 DataGridView 中的表单。我有另一种形式,可以将文本框信息提交到数据库中。

我有另一种形式(见下图),允许用户单击按钮(按钮 1)打开 CSV 文件,使用“openFileDialog”,并在表单的 dataGridView 中显示所选文件的内容 (示例如下)

我的目标:我想要一个按钮(按钮 3),在同一个表单上,将 dataGridView 的显示结果提交到前面提到的 Access 数据库中。

看来我拥有我需要的所有组件。感觉我并不太远,但我的代码中似乎仍然有问题和/或缺失。几个星期以来,我一直在努力实现这一目标。请帮忙!!!

这是表单的屏幕截图和表单的完整代码。非常感谢所有帮助!

enter image description here

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Globalization;
using System.Configuration;
using System.Data.OleDb;

namespace csvToGrid
{
    public partial class Import : Form
        {
            public Import()
                {
                    InitializeComponent();
                }
        public void button1_Click(object sender, EventArgs e)
            {
                string delimiter = ",";
                string tablename = "medTable";
                DataSet dataset = new DataSet();
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*";
                openFileDialog1.FilterIndex = 1;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        if (MessageBox.Show("Are you sure you want to import the data from \n " + openFileDialog1.FileName + "?", "Are you sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
                            {
                                filename = openFileDialog1.FileName;
                                StreamReader sr = new StreamReader(filename);
                                string csv = File.ReadAllText(openFileDialog1.FileName);
                                dataset.Tables.Add(tablename);
                                dataset.Tables[tablename].Columns.Add("Prescription");
                                dataset.Tables[tablename].Columns.Add("Customer Name");
                                dataset.Tables[tablename].Columns.Add("Medication");
                                dataset.Tables[tablename].Columns.Add("Quantity");
                                dataset.Tables[tablename].Columns.Add("Date Filled");

                                string allData = sr.ReadToEnd();
                                string[] rows = allData.Split("\r".ToCharArray());

                                foreach (string r in rows)
                                    {
                                        string[] items = r.Split(delimiter.ToCharArray());
                                        dataset.Tables[tablename].Rows.Add(items);
                                    }
                                this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
                                MessageBox.Show(filename + " was successfully imported. \n Please review all data before sending it to the database.", "Success!", MessageBoxButtons.OK);
                            }
                        else
                            {
                                this.Close();
                            }
                }
            }

        public string filename { get; set; }


        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
            {

            }

        private void Import_Load(object sender, EventArgs e)
            {

            }

        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button3_Click(object sender, EventArgs e)

            //remove the semicolon, and add brackets below after line
            {   
                //create the connection string
                string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Search\\Database.accdb";
                //create the database query
                string query = "SELECT * FROM script_Orders";
                //create an OleDbDataAdapter to execute the query
                OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);
                //create a command builder
                OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
                //create a DataTable to hold the query results
                DataTable dTable = new DataTable();
                //fill the DataTable
                dAdapter.Fill(dTable);
                //the DataGridView
                DataGridView dataGridView1 = new DataGridView();
                //BindingSource to sync DataTable and DataGridView
                BindingSource bSource = new BindingSource();
                //set the BindingSource DataSource
                bSource.DataSource = dTable;
                //set the DataGridView DataSource
                dataGridView1.DataSource = bSource;
                // An update function to get the changes back into the database.
                dAdapter.Update(dTable);
            }

        }
    }

enter image description here

非常欢迎提供示例!

最佳答案

挑战来自使用数据集对象来处理数据,而 CSV 文件位于 Access 数据库的外部。要解决此问题,您可以通过编程方式将更新从 DataGridView 保存到 Access 数据库。

插入示例

DataRow anyRow = DatasetName.ExistingTable.NewRow();
anyRow.FirstName = "Jay";
anyRow.LastName = "Stevens";
ExistingTable.Rows.Add(anyRow);

更新示例

dsCustomers1.Customers[4].CompanyName = "Wingtip Toys";
dsCustomers1.Customers[4].City = "Buffalo";

删除例子

dsCustomers1.Customers.Rows[0].Delete();

希望这对您有所帮助。干杯。

关于c# - 使用 C# 使用 CSV 文件填充 DataGridView,并使用结果更新 Access 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571799/

相关文章:

c# - 调用具有未知签名的方法

java - 创建数据库 View 与创建 Hibernate 映射 - 性能

excel - 在 Excel 中显示 MS-Access 记录的富文本格式

mysql - ms Access MySQL文件ODBC连接ODBC--调用失败

php - 如何追踪用户去过哪里? (数据库)

sql - ADO 命令运行多个 SQL 语句 : can't get error message back: USE THE Connection. 错误集合

c# - 在 asp.net CheckBoxList 中选择所有项目

c# - 存储获取 blob TaskCanceledException

c# - 我们可以使用 asp.net 和 c# 从本地主机发送邮件吗?

MySQL 错误 "There can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT clause"即使我没有做错