简体   繁体   English

如何使用c#windows form应用程序将excel文件上传到sql数据库表

[英]how to Upload a excel file to sql database table using c# windows form application

I want to upload a excel file through windows form application in c# and want to import the data to database ( Mysql server). 我想通过c#中的windows表单应用程序上传excel文件,并希望将数据导入数据库(Mysql服务器)。 how can i do that??? 我怎样才能做到这一点??? I have created a form which requires me to upload a excel file into the mysql database . 我创建了一个表单,要求我将excel文件上传到mysql数据库。 its an bulk insert data to database table. 它是一个批量插入数据到数据库表。

My Excel File Contain columns like userid,password,first_name,last_name,user_group AND MySql Database table(aster_users) Contain many columns like userid,password,first_name,last_name,user_group,queue,active,created_date,created_by,role .. 我的Excel文件包含userid,password,first_name,last_name,user_group和MySql Database表(aster_users)等列,包含许多列,如userid,password,first_name,last_name,user_group,queue,active,created_date,created_by,role ..

i need to upload that excel file to my database and other columns will get empty or null that's not a matter. 我需要将该excel文件上传到我的数据库,其他列将变为空或null,这不是问题。

My Form design is 我的表格设计是 在此输入图像描述

Here is My c# Code: 这是我的c#代码:

using MySql.Data.MySqlClient;
using System;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace UploadFileToDatabase
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();       
    }

    String MyConString = "SERVER=******;" +
           "DATABASE=dbs;" +
           "UID=root;" +
           "PASSWORD=pwsd;" + "Convert Zero Datetime = True";
private void BtnSelectFile_Click(object sender, EventArgs e)
    {
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Filter = "Text files | *.csv";
        if (dlg.ShowDialog() == DialogResult.OK)
        {
            string fileName;
            fileName = dlg.FileName;
            txtfilepath.Text = fileName;
        }
      }

private void btnUpload_Click(object sender, EventArgs e)           
 {                
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtfileparth.Text + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";

        using (OleDbConnection connection =
              new OleDbConnection(connectionString))
        {
            OleDbCommand command = new OleDbCommand
                    ("Select * FROM [Sheet1$]", connection);

            connection.Open();

            using (DbDataReader dr = command.ExecuteReader())
            {
                string sqlConnectionString = MyConString;

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                {
                    bulkCopy.ColumnMappings.Add("[userid]", "userid");
                    bulkCopy.ColumnMappings.Add("password", "password");
                    bulkCopy.ColumnMappings.Add("first_name", "first_name");
                    bulkCopy.ColumnMappings.Add("last_name", "last_name");
                    bulkCopy.ColumnMappings.Add("user_group", "user_group");
                    bulkCopy.DestinationTableName = "aster_users";
                    bulkCopy.WriteToServer(dr);
                    MessageBox.Show("Upload Successfull!");
                }
            }

        }
}

Here is how i tried.i got an error message like this 这是我试过的方式。我得到了这样的错误信息

Additional information: External table is not in the expected format. 附加信息:外部表格不是预期的格式。

in this line connection.Open(); 在这行连接.Open(); . How can this be Done? 如何才能做到这一点?

在此输入图像描述

using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace IMPORT
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    String MyConString = "SERVER=******;" +
           "DATABASE=db;" +
           "UID=root;" +
           "PASSWORD=pws;";

private void btnSelectFile_Click(object sender, EventArgs e)
    {
        OpenFileDialog openfiledialog1 = new OpenFileDialog();
        openfiledialog1.ShowDialog();
        openfiledialog1.Filter = "allfiles|*.xls";
        txtfilepath.Text = openfiledialog1.FileName;
    }
private void btnUpload_Click(object sender, EventArgs e)
{
 string path = txtfilepath.Text;

        string ConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties = Excel 8.0";

        DataTable Data = new DataTable();

        using (OleDbConnection conn =new OleDbConnection(ConnString))
        {
            conn.Open();

            OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM [dataGridView1_Data$]", conn);
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            adapter.Fill(Data);

            conn.Close();
        }
        string ConnStr = MyConString;
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnStr))
        {
            bulkCopy.DestinationTableName = "TABLE NAME";
            bulkCopy.ColumnMappings.Add("userid", "userid");
            bulkCopy.ColumnMappings.Add("password", "password");
            bulkCopy.ColumnMappings.Add("first_name", "first_name");
            bulkCopy.ColumnMappings.Add("last_name", "last_name");
            bulkCopy.ColumnMappings.Add("user_group", "user_group");
            bulkCopy.WriteToServer(Data);
            MessageBox.Show("UPLOAD SUCCESSFULLY");
        }
     }
 }

An example found http://technico.qnownow.com/bulk-copy-data-from-excel-to-destination-db-using-sql-bulk-copy/ . 一个例子是 http://technico.qnownow.com/bulk-copy-data-from-excel-to-destination-db-using-sql-bulk-copy/ And ERROR: Additional information: External table is not in the expected format 错误:附加信息:外部表格不是预期的格式

There is an awesome link that shows how to upload to c# datatable from excel...in case the link dies I am sharing the procedure.... 有一个很棒的链接 ,显示如何从excel上传到c#datatable ...如果链接死亡我正在共享程序....

The excel Connection Strings for diff versions: diff版本的Excel连接字符串:

private string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'";
private string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'";

The File select event: 文件选择事件:

private void BtnSelectFile_Click(object sender, EventArgs e)
    {
        DataTable dt;
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Filter = "Excel files | *.xls";
        if (dlg.ShowDialog() == DialogResult.OK)
        {
            string filePath = dlg.FileName;
            string extension = Path.GetExtension(filePath);
            string conStr, sheetName;

            conStr = string.Empty;
            switch (extension)
            {

                case ".xls": //Excel 97-03
                    conStr = string.Format(Excel03ConString, filePath);
                    break;

                case ".xlsx": //Excel 07 to later
                    conStr = string.Format(Excel07ConString, filePath);
                    break;
            }

            //Read Data from the Sheet.
            using (OleDbConnection con = new OleDbConnection(conStr))
            {
                using (OleDbCommand cmd = new OleDbCommand())
                {
                    using (OleDbDataAdapter oda = new OleDbDataAdapter())
                    {
                        dt = new DataTable();
                        cmd.CommandText = "SELECT * From [Sheet1$]";
                        cmd.Connection = con;
                        con.Open();
                        oda.SelectCommand = cmd;
                        oda.Fill(dt);
                        con.Close();
                    }
                }
            }
            //Save the datatable to Database
            string sqlConnectionString = MyConString;
            if(dt != null)
            {                
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
            {
                bulkCopy.ColumnMappings.Add("[userid]", "userid");
                bulkCopy.ColumnMappings.Add("password", "password");
                bulkCopy.ColumnMappings.Add("first_name", "first_name");
                bulkCopy.ColumnMappings.Add("last_name", "last_name");
                bulkCopy.ColumnMappings.Add("user_group", "user_group");
                bulkCopy.DestinationTableName = "aster_users";
                bulkCopy.WriteToServer(dt);
                MessageBox.Show("Upload Successfull!");
            }
            }
        }
}

Then you can just save the datatable to mySql database which I hope you know how to do...If you can't then comment I'll try my best to help you. 然后你可以将数据表保存到mySql数据库,我希望你知道该怎么做......如果你不能再评论我会尽力帮助你。 Thank You 谢谢

Hope this helps.... 希望这可以帮助....

ஆர்த்தி, ஆர்த்தி,

Use the Below Connection String Format 使用以下连接字符串格式

 string File = sResponsedExcelFilePath;

 string result = Path.GetFileName(sFilePath);    

 ExcelReaderConnString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + File +"\\"+ result + ";Extended Properties=Excel 12.0;");

Hope this works for you. 希望这对你有用。

using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace IMPORT
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    String MyConString = "SERVER=******;" +
           "DATABASE=db;" +
           "UID=root;" +
           "PASSWORD=pws;";

private void btnSelectFile_Click(object sender, EventArgs e)
    {
        OpenFileDialog openfiledialog1 = new OpenFileDialog();
        openfiledialog1.ShowDialog();
        openfiledialog1.Filter = "allfiles|*.xls";
        txtfilepath.Text = openfiledialog1.FileName;
    }
private void btnUpload_Click(object sender, EventArgs e)
{
 string path = txtfilepath.Text;

        string ConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties = Excel 8.0";

        DataTable Data = new DataTable();

        using (OleDbConnection conn =new OleDbConnection(ConnString))
        {
            conn.Open();

            OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM [dataGridView1_Data$]", conn);
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            adapter.Fill(Data);

            conn.Close();
        }
        string ConnStr = MyConString;
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConnStr))
        {
            bulkCopy.DestinationTableName = "TABLE NAME";
            bulkCopy.ColumnMappings.Add("userid", "userid");
            bulkCopy.ColumnMappings.Add("password", "password");
            bulkCopy.ColumnMappings.Add("first_name", "first_name");
            bulkCopy.ColumnMappings.Add("last_name", "last_name");
            bulkCopy.ColumnMappings.Add("user_group", "user_group");
            bulkCopy.WriteToServer(Data);
            MessageBox.Show("UPLOAD SUCCESSFULLY");
        }
     }
 }

I had huge problems trying to use either/both Jet and ACE.OLEDB providers. 尝试使用Jet和ACE.OLEDB提供程序时,我遇到了很大的问题。 You could try this o/s library ClosedXML, which will import xlsx files: 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine 您可以尝试使用这个o / s库ClosedXML,它将导入xlsx文件: 'Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册

Available via Nuget. 可通过Nuget获得。 It has its own wiki: https://github.com/ClosedXML/ClosedXML/wiki 它有自己的wiki: https//github.com/ClosedXML/ClosedXML/wiki

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何配置SQL数据库C#Windows窗体应用程序 - How to configure sql database c# windows form application 如何使用C#在Windows窗体应用程序中的SQL Server Compact数据库中搜索? - How to Search in SQL Server Compact Database in windows form application using C#? 如何使用 C# 将 CSV 文件上传到 sql 服务器表? - How to Upload CSV file to sql server table using C#? 如何在Web窗体应用程序中使用asp.net c#将Excel数据上载到具有自动递增ID字段的SQL Server表中? - How to upload Excel data into a SQL Server table with an auto incremented Id field using asp.net c# in a web forms application? C# Windows Form Application With SQL 服务器数据库部署 - C# Windows Form Application With SQL Server database deployment 如何从 c# windows 应用程序在谷歌驱动器中上传备份数据库文件? - How to upload backup database file in google drive from c# windows application? 使用Windows窗体和C#将Excel文件保存在应用程序文件夹中并将内容上传到SQL Server - Saving excel file in application folder and uploading the content to SQL Server using windows forms and C# 如何将 Excel 文件数据导入 SQLite 数据库中的 c# Z0F4137ED1502B50455D6083AA258B 表格? - how to import Excel file data into SQLite database in c# windows form? 如何使用WebRequest从ac#Windows表单将文件上传到node.js服务器(使用强大)? - How to upload a file to a node.js server (using formidable) from a c# windows form using webRequest? 如何将txt或csv文件上传到windows表单c# - how to Upload a txt or csv file to windows form c#
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM