public class ExcelToMSSql {
public static int count = 0;
public static string error = "";
// 入口:傳入 Excel 路徑
public static void DataTranf(string execlpath) {
DataTable dtExcel = ExcelToDataTable(execlpath, "Sheet1");
for (int i = 0; i < dtExcel.Rows.Count; i++) {
InsertToDB(
dtExcel.Rows[i][0].ToString().Trim(), // userno
dtExcel.Rows[i][1].ToString().Trim(), // username
dtExcel.Rows[i][2].ToString().Trim(), // sex
FormsAuthentication.HashPasswordForStoringInConfigFile(
dtExcel.Rows[i][3].ToString().Trim(), "MD5"), // pwd 加密
dtExcel.Rows[i][4].ToString().Trim(), // classname
dtExcel.Rows[i][5].ToString().Trim() // address
);
}
}
// OleDb 讀取 Excel → DataTable
public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName) {
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + strExcelFileName + ";" +
"Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
string strExcel = string.Format("SELECT * FROM [{0}$]", strSheetName);
DataSet ds = new DataSet();
using (OleDbConnection conn = new OleDbConnection(strConn)) {
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn);
adapter.Fill(ds, strSheetName);
}
return ds.Tables[strSheetName];
}
// 參數化寫入 SQL Server(防注入)
public static void InsertToDB(string studno, string studname, string studsex,
string studpwd, string studclass, string middleschool) {
string connstr = ConfigurationManager.AppSettings["constr"];
using (SqlConnection conn = new SqlConnection(connstr)) {
conn.Open();
string sql = @"INSERT INTO student (userno, username, sex, pwd, classname, address)
VALUES (@userno, @username, @sex, @pwd, @classname, @address)";
using (SqlCommand cmd = new SqlCommand(sql, conn)) {
cmd.Parameters.AddWithValue("@userno", studno);
cmd.Parameters.AddWithValue("@username", studname);
cmd.Parameters.AddWithValue("@sex", studsex);
cmd.Parameters.AddWithValue("@pwd", studpwd);
cmd.Parameters.AddWithValue("@classname", studclass);
cmd.Parameters.AddWithValue("@address", middleschool);
try {
cmd.ExecuteNonQuery();
count++;
} catch (Exception e) {
error += e.Message + "<br />";
}
}
}
}
}
| 參數 | 含義 | 建議值 |
|---|---|---|
| Provider | OLE DB 驅動 | Microsoft.Jet.OLEDB.4.0(.xls) / Microsoft.ACE.OLEDB.12.0(.xlsx) |
| Extended Properties | Excel 版本與讀取模式 | Excel 8.0;HDR=YES;IMEX=1 |
| HDR=YES | 第一行作為列名 | 標準表頭用 YES,無表頭用 NO |
| IMEX=1 | 導入模式(只讀) | 混合類型列強制按文本讀取,避免數字列讀空 |
現象:本機運行正常,部署到 IIS 服務器報錯「無法初始化數據源」或「找不到安裝可用的 ISAM」。
原因:
最佳實踐:
/App_Data/Uploads/)Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'僅需修改連接字串與 SqlCommand 為對應 ADO.NET 對象(MySqlCommand、OracleCommand 等),邏輯完全復用。