从excel列创建sql表

时间:2014-02-26 15:29:43

标签: c# sql excel

h_header        data type                           cp_retirementPlanningAnalysis        data type
versionId       int                                 signifShortFall                      varchar
serviceId       varchar(10)                         isProjIncAdeq                        boolean
creationTime    date                                howCloseRetire                       varchar
brandCode       varchar                             clientsView                          varchar

我上面的excel文件有一个标题,我希望它是表名,然后是下面的列名,旁边有数据类型。有没有简单的方法我可以从每列生成表,加上数据类型的属性?我需要创建大约70个表。

1 个答案:

答案 0 :(得分:1)

您应该能够轻松地将Excel表格重新格式化为两列而不是四列,而不是直接从Excel中读取。然后,您可以将其另存为CSV文件,并以某种方式手动构建查询,类似于以下内容:

using System;
using System.IO;

namespace sample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Read all lines from csv file describing single table
            string query = "CREATE TABLE ";
            using (StreamReader sr = new StreamReader(File.OpenRead(@"C:\test\test.csv"))){
                // Skip the first line
                sr.ReadLine();
                // Get the header from the second line
                query += sr.ReadLine().Split(',')[0] + '(';
                while (!sr.EndOfStream)
                {
                    // Add parameters to query
                    string[] line = sr.ReadLine().Split(',');
                    query += line[0] + ' ' + line[1] + ',';
                }
                query = query.TrimEnd(',');
                query += ");";
                Console.WriteLine(query);
            }
        }
    }
}

这只是一个简单方法的示例,无需创建与Excel的连接。但是,您也可以将其直接连接到Excel文件以循环显示每个工作表,或使用Linq循环浏览此工作表等。

使用以下文字的CSV文件:

h_header,data type
cp_retirementPlanningAnalysis,data type
versionId,int
signifShortFall,varchar
serviceId,varchar(10)
isProjIncAdeq,boolean
creationTime,date
howCloseRetire,varchar
brandCode,varchar
clientsView,varchar

创建的查询是:

CREATE TABLE cp_retirementPlanningAnalysis(versionId int,signifShortFall varchar,serviceId varchar(10),isProjIncAdeq boolean,creationTime date,howCloseRetire varchar,brandCode varchar,clientsView varchar);