C50108
Search…
2019/0620/MVC補充C#MS SQL匯入CSV+上傳CSV存入MS SQL

CSV 讀檔 到資料庫或畫面
批次新增
讀進去 讀出來
單純的 CSV 連插件都不用,讀檔方式都是,逗點相隔
BIG5 不會有字碼問題
UNCODE 有字碼問題

首先SQL Server 連接
設計模式去用精靈設定Sqldatasourse 或自己寫
接著去加入控制器DefaultController.cs
其實很簡單 就是讀到一個dataset 檔案 io 物件 讀寫 stream reader writer
用 ADO.NET 比較簡單
Using
System.Data.SqlClient
System.Configuration;
System.IO
有架構的寫法
SqlConnection
ConfigurationManager
SqlDataAdapter
DataSet
利用這幾個物件
SqlDataAdapter 資料查詢完後 Fill 填進 dataset
利用 DataTable 建立資料表物件
利用 streamWriter 物件寫入
建立一個資料夾放輸出的檔案 fileoutput
實體與邏輯路徑轉換 server.mappath
Append 覆蓋或不覆蓋 true false
Encoding.default 抓預設字符編碼
宣告一個字串預備使用
不知道有幾筆資料
所以用 foreach()
Datacolumn 讀欄位
Column 欄位
Datarow 一筆資料就是一個 datarow
Row 資料
讀完之後要寫入datatable 所以
矩陣 欄位 與 資料 所以要用 雙迴圈
Trim() 去掉頭尾空白
加 \n 然後要把資料寫進去 打開 write() 物件
用完要關掉 dispose
接著 新增 view 執行測試 執行完後 檢視資料夾 確實有一個 csv 檔案叫 output
邏輯很簡單其實只是複雜

批次新增資料時使用,且不是由開發維護人員放入,
而是開發一個介面由員工來用
如果要cobe 學生資料表 關聯都必須要一樣
Select * into 學生2 from 學生 ( 這個必須要沒有學生2這個表
如我要從一個存在的資料表塞資料
insert into ( 不要寫value 要用 select的
Cobe後的只差在沒指定pk
然後把資料刪除 接著要做
上傳get post action
檔案當成參數 傳進來 所以用 httppostedfilebase 物件型態
做判斷 不能為空值 不然報錯
Ie chrome path 抓值方式不同 ( 附檔名差異
所以要再多一個 if 判斷 且報錯或 修正 ie 問題
接著一樣 操作 sqldatadapter
然後fill丟資料到 dataset
接著利用 streamreader 物件去編碼讀檔
利用方法Readline方法
第一行是欄位所以要記得避過
接著做一個 string陣列預備使用
接著用迴圈把 欄位 值 讀出來 因為每筆只有一行 所以用endstream控制次數
用逗點為依據split方法分割字串
接著把切個出來的字串 餵入 datarow
因為不知道幾欄所以用 for
最尾端不能有逗點 不然會多一筆空字串值 所以 這邊環圈的最大值要注意
幾筆資料 幾欄
然後加到 datatable 裡面去

利用 datacommandbuilder 物件
讀dataset update 即可 ( 如果忘記就在去查察都有講過
接著新增 view
必須要搞定上傳介面 且 一定要放在form 標籤內 因為不是純 get url 傳值
因為要上傳資料 enctype 藥用 multipart/form-data
Action 要打url.action(@upload) 才知道訪問目標
Dataset 可以用放大鏡看
偵錯 視覺化顯示 !? ( 要回放影片檢視 不小心走神了
[VS.NET]偵錯使用 DataSet Visualizers 視覺化檢視來觀察資料及修改資料 | [email protected]點部落 - 點部落
日期沒做隱含轉換必須要再做處理
所以我們要先抓最後一串進行轉形態
但這樣就會比較不活
所以讀檔相對麻煩
如果資料庫是 null 的話 讀到excell就會是空字串
所以要再多一個判斷不能等於空””
以上 inport 與 outport

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
namespace File_Import_Outport.Controllers
{
public class DefaultController : Controller
{
SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlDataAdapter da;
DataSet ds;
// GET: Default
public ActionResult Index()
{
da = new SqlDataAdapter("select * from 學生",Conn);
ds = new DataSet();
da.Fill(ds);
DataTable dt = new DataTable();
dt = ds.Tables[0];
StreamWriter wr = new StreamWriter(Server.MapPath("~\\FileOutput\\output.csv"),false,System.Text.Encoding.Default);
string data = "";
foreach (DataColumn colume in dt.Columns)
{
data += colume.ColumnName + ",";
}
data += "\n";
wr.Write(data);
data = "";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn colume in dt.Columns)
{
data += row[colume].ToString().Trim() + ",";
}
data += "\n";
wr.Write(data);
data = "";
}
wr.Dispose();
wr.Close();
return View();
}
public ActionResult UpLoad()
{
return View();
}
[HttpPost]
public ActionResult UpLoad(HttpPostedFileBase upfile)
{
if(upfile!=null)
{
if(Path.GetExtension(upfile.FileName)==".csv")
{
da = new SqlDataAdapter("select * from 學生2", Conn);
ds = new DataSet();
da.Fill(ds);
StreamReader sr = new StreamReader(upfile.InputStream,System.Text.Encoding.Default);
sr.ReadLine();
string data = "";
string[] arrData;
while (!sr.EndOfStream)
{
data=sr.ReadLine();
arrData = data.Split(',');
DataRow dr = ds.Tables[0].NewRow();
int k = ds.Tables[0].Columns.Count;
for (int i=0;i<k;i++)
{
if(i==(k-1))
{
if(arrData[i]!="")
dr[ds.Tables[0].Columns[i]]= Convert.ToDateTime(arrData[i]);
}
else
dr[ds.Tables[0].Columns[i]] = arrData[i];
}
ds.Tables[0].Rows.Add(dr);
}
SqlCommandBuilder sc = new SqlCommandBuilder(da);
da.Update(ds);
}
}
return View();
}
}
}

@{
ViewBag.Title = "Index";
}
<h2>Index</h2>

@{
ViewBag.Title = "UpLoad";
}
<h2>UpLoad</h2>
<form action="@Url.Action("UpLoad")" method="post" enctype="multipart/form-data">
<input id="File1" name="upfile" type="file" />
<input id="Submit1" type="submit" value="submit" />
</form>
Copy link
On this page
#MVC收尾 CSV 匯入匯出
##匯出sql資料寫入 excel
##上傳excel檔案然後匯入資料庫
##那如何寫回資料庫呢?