2010-06-11 120 views
1

我需要帮助从Excel自动生成列名。我认为:我们可以做以下代码:如何使用Excel列创建SQL表?

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

via 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(); 
} 

回答

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); 
} 
0

这不是一个C#解决方案......它是一个快速和肮脏的解决方案,从excel。 一个c#解决方案将更加强大,并允许你最有可能指向一个目标xls,并让它给你答案 - 这种解决方案是为了如果你需要快速的答案,没有时间写程序或如果有人在他们的电脑上没有C#开发环境。

一种可能的方式来获得你正在寻找的结果是:

  • 突出显示该行Excel中有列标题
  • 复制它们
  • 去一个新的工作表
  • 右键单元格A1
  • 点击粘贴转置
  • 它会将它们粘贴为列格式
  • 去B2和在粘贴此公式:

    = CONCATENATE( “[”,SUBSTITUTE(A1,””, “”), “] VARCHAR(20),”)

  • 然后粘贴该公式一路下滑旁边的列标题栏

  • 拷贝的方式,结果到SQL Server,然后添加你的代码 顶线“CREATE TABLE [DBO]。[Addresses_Temp](”

  • 然后加上你的右括号

我们所做的是:

  • 我们从标题行的所有colunn头和
  • 使他们成为一列
  • 然后取出所有空间(他们应该多字列标题)和
  • 加到开始括号“[”和
  • 加上“] VARCHAR(20),”(该行的其余代码)

enter image description here