C#winform根据选择的Excel文件在数据库中创建数据表
需求:根据选择的Excel文件在数据库中创建数据表;可以实现特殊字段(比如字段中含有数字、下划线、特殊字符等)以及表名创建
C#实现
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class 创建表 : Form
{
private void button122_Click(object sender, EventArgs e)
{
string tableName = tableNameTextBox.Text;
string connectionString = "";
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Filter = "Excel Files|*.xlsx;*.xls";
openFileDialog.Title = "Select an Excel file";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
tableName = tableNameTextBox.Text;
connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath}; Extended Properties='Excel 12.0;HDR=YES;'";
}
}
string sqlConnectionString = "server=127.0.0.1;uid=sa;pwd=xyz@0123456;database="+ datebasetext.Text;
try
{
using (OleDbConnection excelConnection = new OleDbConnection(connectionString))
{
excelConnection.Open();
DataTable schemaTable = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null);
if (schemaTable.Rows.Count == 0)
{
MessageBox.Show("Excel文件列名为空!");
return;
}
DataView sortedView = schemaTable.DefaultView;
sortedView.Sort = "ORDINAL_POSITION ASC";
DataTable sortedSchemaTable = sortedView.ToTable();
// Create the SQL CREATE TABLE statement
string createTableQuery = $"CREATE TABLE [{tableName}] (";
List<string> existingColumnNames = new List<string>();
foreach (DataRow row in sortedSchemaTable.Rows)
{
string columnName = row["COLUMN_NAME"].ToString();
if (!existingColumnNames.Contains(columnName))
{
createTableQuery += $"[{columnName}] NVARCHAR(2048), ";
existingColumnNames.Add(columnName);
}
}
createTableQuery = createTableQuery.TrimEnd(',', ' ');
createTableQuery += ")";
using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand(createTableQuery, sqlConnection))
{
sqlCommand.ExecuteNonQuery();
}
}
MessageBox.Show("创建表成功!");
}
}
catch (Exception ex)
{
MessageBox.Show("报错信息: " + ex.Message);
}
}
}
}