如何使用excel列创建SQL表?

时间:2010-06-11 12:53:00

标签: c# sql-server-2005 excel office-2007

我需要帮助自动从excel生成列名。我认为:我们可以做以下代码:

CREATE TABLE [dbo].[Addresses_Temp] ( 
    [FirstName]   VARCHAR(20), 
    [LastName]    VARCHAR(20), 
    [Address]     VARCHAR(50), 
    [City]        VARCHAR(30), 
    [State]       VARCHAR(2), 
    [ZIP]         VARCHAR(10) 
) 

通过C#。如何从Excel中学习列名?

private void Form1_Load(object sender, EventArgs e)
{
   ExcelToSql();
}

void ExcelToSql()
{
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\MPD.xlsm;Extended Properties=""Excel 12.0;HDR=YES;""";
    // if you don't want to show the header row (first row)            
    // use 'HDR=NO' in the string             
    string strSQL = "SELECT * FROM [Sheet1$]";            
    OleDbConnection excelConnection = new OleDbConnection(connectionString);           
    excelConnection.Open(); // This code will open excel file.            
    OleDbCommand dbCommand = new OleDbCommand(strSQL, excelConnection);          
    OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);            

    // create data table            
    DataTable dTable = new DataTable();            
    dataAdapter.Fill(dTable);            

    // bind the datasource          
    //  dataBingingSrc.DataSource = dTable;         
    // assign the dataBindingSrc to the DataGridView         
    // dgvExcelList.DataSource = dataBingingSrc;             // dispose used objects          
    if (dTable.Rows.Count > 0)
       MessageBox.Show("Count:" + dTable.Rows.Count.ToString());
    dTable.Dispose();           
    dataAdapter.Dispose();           
    dbCommand.Dispose();            
    excelConnection.Close();           
    excelConnection.Dispose();
}

3 个答案:

答案 0 :(得分:0)

它必须是C#吗?如果您愿意使用Java,我在Apache POI上取得了非常好的成绩:http://poi.apache.org/

答案 1 :(得分:0)

您应该能够遍历DataTable的列集以获取列名。

System.Data.DataTable dt;
dt = new System.Data.DataTable();
foreach(System.Data.DataColumn col in dt.Columns)
{
     System.Diagnostics.Debug.WriteLine(col.ColumnName);
}

答案 2 :(得分:0)

这不是C#解决方案......从excel开始,它是一个快速而肮脏的解决方案。 一个c#解决方案会更强大,并且允许您最有可能将其指向目标xls并让它给出答案 - 如果您需要快速获得答案并且没有时间编写程序或如果有人在他们的计算机上没有C#开发环境。

获得您正在寻找的结果的一种可能方法是:

  • 突出显示excel中包含列标题
  • 的行
  • 复制它们
  • 转到新工作表
  • 右键单击单元格A1
  • 点击粘贴转置
  • 它会以列格式粘贴它们
  • 转到B2并将此公式粘贴到:

    = CONCATENATE(" [",SUBSTITUTE(A1,"",""),"] varchar(20),& #34)

  • 然后将该公式一直粘贴到列标题列

  • 旁边
  • 将结果复制到SQL Server中,然后添加您的顶行代码 " CREATE TABLE [dbo]。[Addresses_Temp]("

  • 然后添加您的右括号

我们做的是:

  • 我们从标题ROW和
  • 获得了所有colunn标题
  • 将它们变成了一列
  • 然后删除所有空格(如果它们是多字列标题)和
  • 在开头的支架上加上" ["和
  • 加到最后"] VARCHAR(20)," (代码行的其余部分)

enter image description here