C#winform根据选择的Excel文件在数据库中创建数据表

C#winform根据选择的Excel文件在数据库中创建数据表

需求:根据选择的Excel文件在数据库中创建数据表;可以实现特殊字段(比如字段中含有数字、下划线、特殊字符等)以及表名创建

C#实现

csharp 复制代码
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);
            }
        }




    }
}
相关推荐
星星点点洲9 分钟前
【缓存与数据库结合最终方案】伪从技术
数据库·缓存
小黑屋的黑小子12 分钟前
【MySQL】MySQL索引与事务
数据库·mysql·oracle
OK_boom3 小时前
Dapper的数据库操作备忘
数据库
艺杯羹3 小时前
JDBC之ORM思想及SQL注入
数据库·sql·jdbc·orm·sql注入
blackA_4 小时前
数据库MySQL学习——day4(更多查询操作与更新数据)
数据库·学习·mysql
极限实验室5 小时前
Easysearch 迁移数据之 Reindex From Remote
数据库
朴拙数科5 小时前
基于LangChain与Neo4j构建企业关系图谱的金融风控实施方案,结合工商数据、供应链记录及舆情数据,实现隐性关联识别与动态风险评估
数据库·langchain·neo4j
程序设计实验室5 小时前
一次小而美的重构:使用 C# 在 Avalonia 中生成真正好看的词云
c#
小李学不完5 小时前
Oracle--SQL事务操作与管理流程
数据库
qq_441996055 小时前
为何 RAG 向量存储应优先考虑 PostgreSQL + pgvector 而非 MySQL?
数据库·mysql·postgresql