我作一個 c# excel 匯入 資料庫的網頁
在VS端開發測試抓取xls檔路徑都抓的到,
但發行到 IIS的時後欲說【'Z:\04a.人事課\a001.xls' 不是一個有效的路。請確定路徑名稱是拼對的,而且檔案位於您所連接的伺服器上。】
可以請大大們幫忙是什麼問題呢? 謝謝!!
![https://ithelp.ithome.com.tw/upload/images/20191230/20071931fwjRdj3Ytw.png]
//班別異動匯入
string xlsPath = "Z:\\04a.人事課\\hrclass_20191230.xls";
string sheetName = "工作表1";
//SQL連線字串 清除
//清除先前資料
using (OleDbConnection conn_excel = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + xlsPath + "';Extended Properties = 'Excel 8.0;HDR=YES;IMEX=1;'"))
{
conn_excel.Open();
//SELETE EXCEL 筆數
OleDbCommand cmd_excel = new OleDbCommand("SELECT [工號],[班別],[開始日期],[結束日期] FROM [" + sheetName + "$];", conn_excel);
OleDbDataReader reader_excel = cmd_excel.ExecuteReader();
//SQL連線字串 新增
using (SqlConnection cn_sql = new SqlConnection(@"server=192.168.1.*;uid=***;pwd=***;database=***"))
{
cn_sql.Open();
//宣告Transaction
SqlTransaction stran = cn_sql.BeginTransaction();
try
{
while (reader_excel.Read())
{
//新增
SqlCommand cmd_sql = new SqlCommand("insert into YS_Class2_temp (工號,班別,開始日期,結束日期) values ('" + reader_excel[0] + "','" + reader_excel[1] + "','" + Convert.ToDateTime(reader_excel[2]).ToString("yyyy-MM-dd hh:mm:ss") + "','" + Convert.ToDateTime(reader_excel[3]).ToString("yyyy-MM-dd hh:mm:ss") + "')", cn_sql);
cmd_sql.Transaction = stran;
cmd_sql.ExecuteNonQuery();
}
//迴圈跑完並一次Insert
stran.Commit();
Response.Write("class新增1成功<br>");
Insert_class_log1();
Insert_class_log2();
Insert_class();
}
catch (SqlException ex)
{
Response.Write(ex.Message);
Response.Write(ex.Number);
stran.Rollback();
}
catch (OleDbException ex)
{
Response.Write(ex.Message);
stran.Rollback();
}
catch (Exception ex)
{
Response.Write(ex.Message);
stran.Rollback();
}
finally
{
cn_sql.Close();
conn_excel.Close();
reader_excel.Close();
//Main_class();
}
}
}
IIS存取網路磁碟機
有可能會卡在權限上而存取不到 (IIS跑的使用者帳號預設是IUSR吧?)
如果你堅持要用網路磁碟機
請在存取網路磁碟機之前
用C#再跑一次登入該網路磁碟機以取得權限
https://takamai.pixnet.net/blog/post/38389805-%5B.net%5D-(c%23,vb)-%E9%80%A3%E7%B7%9A%E7%B6%B2%E8%B7%AF%E7%A3%81%E7%A2%9F%E6%A9%9F---%E4%B8%AD%E6%96%B7%E7%B6%B2%E8%B7%AF%E7%A3%81%E7%A2%9F%E6%A9%9F
你可以用Directory.Exists
先去檢查該路徑存不存在?
IIS跑的帳號, 跟你登入Windows的帳號不一樣
所以權限與能否存取到網路磁碟機應該也不一樣
發行到IIS的那台主機,也有"Z:",這個路徑嗎?