错误:其他信息:外部表格不是预期的格式

需要将数据从excel导入到Mysql。 将Excel表格提取到数据库表格时出现错误。我收到了这样的错误消息

外部表格不是预期的格式

在C#窗体窗体应用程序。所以任何一个确切的错误。

这是我正在尝试

using MySql.Data.MySqlClient; 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=uid;" + "PASSWORD=pwd;" + "Convert Zero Datetime = True"; private void ButtonFile_Click(object sender, EventArgs e) { OpenFileDialog openfiledialog1 = new OpenFileDialog(); openfiledialog1.ShowDialog(); openfiledialog1.Filter = "allfiles|*.xls"; TextBox1.Text = openfiledialog1.FileName; } private void ButtonUpload_Click(object sender, EventArgs e) { String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + TextBox1.Text + ";" + "Extended Properties=Excel 8.0;"; OleDbConnection xlConn = new OleDbConnection(connectionString); xlConn.Open(); DataTable data = new DataTable(); OleDbCommand selectCmd = new OleDbCommand("SELECT * FROM [Sheet1$]", xlConn); OleDbDataAdapter xlAdapter = new OleDbDataAdapter(); OleDbDataReader datare = selectCmd.ExecuteReader(); xlAdapter.Fill(data); DataSet xlDataset = new DataSet(); string sqlConnectionString = MyConString; using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) { bulkCopy.ColumnMappings.Add("id", "id"); bulkCopy.ColumnMappings.Add("password", "password"); bulkCopy.ColumnMappings.Add("name", "name"); bulkCopy.DestinationTableName = "TableName"; bulkCopy.WriteToServer(datare); MessageBox.Show("Upload Successfull!"); } } } } 

感谢您的帮助提前。

除了例外,请确保您始终closures连接。 无论如何,以下可能会解决您的问题:

 String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + TextBox1.Text + ";" + "Extended Properties=Excel 8.0;"; using (OleDbConnection excel_con = new OleDbConnection(connectionString )) { excel_con.Open(); DataTable dtExcelData = new DataTable(); //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default. dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), new DataColumn("Name", typeof(string)), new DataColumn("Password",typeof(string)) }); using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", excel_con)) { oda.Fill(dtExcelData); } excel_con.Close(); string consString = MyConString; using (SqlConnection con = new SqlConnection(consString)) { using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) { //Set the database table name sqlBulkCopy.DestinationTableName = "dbo.TableName"; sqlBulkCopy.ColumnMappings.Add("Id", "Id"); sqlBulkCopy.ColumnMappings.Add("Password", "Password"); sqlBulkCopy.ColumnMappings.Add("Name", "Name"); con.Open(); sqlBulkCopy.WriteToServer(dtExcelData); con.Close(); MessageBox.Show("Upload Successfull!"); } } } 

您必须确保列名匹配,并且您的表名也是正确的。

这是基于这里find的一个例子。