0

我正在开发 web 应用程序,它将使用 asp.net c# 中的 FileUpload 控件获取 excel 文件。现在,当单击提交按钮时,我想将 excel 数据插入到我的数据库表中。我在 SQL-Server 中有数据库。数据库表和 excel 文件的字段相同。我想将该 excel 的数据插入到我的数据库表中。那么我该怎么做呢?

4

4 回答 4

2

其他人在评论中提到使用 Excel 互操作读取 Excel 文件,但这对于可能有多个用户的 Web 应用程序来说是不安全的。

要开始使用,请查看Excel 数据阅读器项目。我已经多次使用它来处理来自 Web 应用程序的 Excel 文件,并且效果很好。

于 2013-07-01T13:12:42.197 回答
0

您可以使用 OleDbConnection 中的 Excel 驱动程序使用 OLEDB 类直接从 Excel 文件中读取。获取数据表中的数据并将其保存到数据库中。

 string connectString =
                "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\testit.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";
            OleDbConnection conn = new OleDbConnection(connectString);
            OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Sheet1$]", conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            // Save your datatable records to DB as you prefer.
于 2013-07-01T13:16:37.993 回答
0

试试下面的代码。也许它很粗糙,但它有效

string connectString =
            "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\data\\exceltest.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";
        OleDbConnection conn = new OleDbConnection(connectString);
        OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Sheet1$]", conn);
        DataTable dt = new DataTable();
        da.Fill(dt);
        conn.Close();
        SqlConnection sqlc = new SqlConnection(@"server=.\SQLEXPRESS;user id=sa;pwd=windows;database=exceltest");
        sqlc.Open();
        SqlCommand cmd = new SqlCommand("select * from table1", sqlc);
        SqlDataAdapter sda = new SqlDataAdapter("select * from table1", sqlc);
        sda.InsertCommand = new SqlCommand("insert into table1", sqlc);
        DataTable dbset = new DataTable();
        da.Fill(dbset);
        SqlCommand cmdinsert = new SqlCommand();
        cmdinsert.Connection = sqlc;
        foreach (DataRow dsrc in dt.Rows)
        {
            string insertcommand = "insert into table1" + dbset.TableName + " ";
            string cols = "";
            string vals = "";
            DataRow dr = dbset.NewRow();
            foreach (DataColumn clm in dt.Columns)
            {
                dr[clm.ColumnName] = dsrc[clm.ColumnName].ToString(); ;
                if (cols.Length > 0)
                {
                    cols += ",[" + clm.ColumnName+"]";
                }
                else
                {
                    cols = "["+clm.ColumnName+"]";
                }
                if (vals.Length > 0)
                {
                    vals += "," + "'" + dsrc[clm.ColumnName].ToString() + "'";
                }
                else
                {
                    vals = "'" + dsrc[clm.ColumnName].ToString() + "'";
                }

            }
            insertcommand += "(" + cols + ") values("+vals+")";
            cmdinsert.CommandText = insertcommand;
            cmdinsert.ExecuteNonQuery();
            insertcommand = "";

        }

        sqlc.Close();
于 2013-07-01T14:03:01.117 回答
0

我一直在测试 NPOI 作为另一个 3rd 方 Excel 解析库的替代品。

https://code.google.com/p/npoi/

到目前为止,它似乎工作得很好,并且具有非常完整的功能集。当然,如果您只需要非常基本的 Excel 数据读取(而不是写入),那么这里提到的其他 DB 连接样式接口应该可以很好地工作。

编辑:添加示例代码

using( FileStream fs = new FileStream("file.xls", FileMode.Open, FileAccess.Read) )
{
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    double value = wb.GetSheet("Sheet1").GetRow(1).GetCell(1).NumericCellValue;
    // read other values as necessary.
}
于 2013-07-01T13:29:16.587 回答