Excel表导入数据库

Excel表数据导入到Sql数据库

代码如下:

string[] data = new string[3];  //定义一个数组用来用来存储 drd 中读取的数据
string filePathName = "";       //存储文件名  

//定义一个打开文件对话框并设置相关属性
OpenFileDialog importFileDialog = new OpenFileDialog();
importFileDialog.AddExtension = true;
importFileDialog.CheckFileExists = true;
importFileDialog.CheckPathExists = true;
importFileDialog.Filter = "Excel表格文件(97-2003)(*.xls)|*.xls|Excel表格文件|*.xlsx";
importFileDialog.InitialDirectory = "3";
importFileDialog.Title = "选择导入的终端信息文件";
importFileDialog.Multiselect = false;

//判断用户是不是选择了“打开”操作
if (importFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    filePathName = importFileDialog.FileName;
    string strConn = "";

    //判断文件扩展名是否是.xlsx
    if (filePathName.Substring(filePathName.Length - 5).ToLower() == ".xlsx")
    {
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePathName + "';Extended Properties='Excel 12.0;HDR=YES'";
    }
    //判断文件扩展名是否是.xls
    else if (filePathName.Substring(filePathName.Length - 4).ToLower() == ".xls")
    {
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + filePathName + "';Extended Properties='Excel 8.0;HDR=YES;'";
    }
    else
    {
        MessageBox.Show("选择的文件不合法!");
        return;
    }
    OleDbConnection conn = new OleDbConnection(strConn);
    string strSqlConn = "Data Source=(local);Initial Catalog=IMPORT;Persist Security Info=False;User ID=sa; pwd = sa";
    SqlConnection sqlConn = new SqlConnection(strSqlConn);
    sqlConn.Open();
    if (conn.State.ToString() == "Closed")
        conn.Open();

    // 读取文件语句
    string strSql = "SELECT * FROM [sheet1$]";
    OleDbCommand cmmd = new OleDbCommand(strSql, conn);
    OleDbDataReader drd = cmmd.ExecuteReader();

    //开始读取 drd 中的数据,读取数据要确保Excel中每列的数据为对应该数据库表格中的数据
    //有一点要注意,在读Excel时,是不读第一行数据的。
    //(至于为什么我也不知道,我想可能是特意跳Excel的标题行吧)
    while (drd.Read())
    {
        data[0] = drd[0].ToString();
        data[1] = drd[1].ToString();
        data[2] = drd[2].ToString();
        //*********************这一块可以单独分离出来*********
        //定义插入Sql语句
        //此处我的数据库表中的字段如下
        //[ImportField1],[ImportField2],[ImportField3]
        StringBuilder sbSql = new StringBuilder();
        sbSql.Append("INSERT INTO [tbImport]");
        sbSql.Append(" (");
        sbSql.Append(" [ImportField1]");
        sbSql.Append(",[ImportField2]");
        sbSql.Append(",[ImportField3]");
        sbSql.Append(") VALUES (");
        sbSql.Append(String.Format("'{0}',", data[0]));
        sbSql.Append(String.Format("'{0}',", data[1]));
        sbSql.Append(String.Format("'{0}',", data[2]));
        sbSql.Append(");");  
        SqlCommand sqlCmmd = new SqlCommand(sbSql.ToString(), sqlConn);
        //****************************************************
        sqlCmmd.ExecuteNonQuery(); 
    } 
    conn.Close(); 
    sqlConn.Close(); 
    MessageBox.Show("数据导入成功。"); 
}

 

posted @ 2012-11-09 10:53  Selway  阅读(513)  评论(0编辑  收藏  举报