找了好幾天的代碼和微軟幫助,還是沒能找到想要的處理方法,使用BULK insert匯入檔案是所有直接匯入且必須格式確定和與表的格式對應
我希望按要求匯入列的資料,我看到OPENROWSET,但是沒看懂,不知是否是符合我需要的(麻煩了解的人指點一二謝謝)
想寫個winfrom程式,選定檔案路徑,設定匯入的列是檔案的哪些列,沒選不匯入,可以多選幾組資料(比如檔案一行中有三組 id,name(id1,name1、id2,name2、id3,name3) 資料表只是 id,name 那我需要設定匯入三組,)
類似下圖,

找到有如下代碼,但是本人愚鈍沒看懂
,轉至https://www.cnblogs.com/superlee/archive/2010/01/12/1645292.html代碼如下
string fPath=this.fName.PostedFile.FileName;//獲得要匯入的文本檔案
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得檔案的擴展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//資料庫連接物件
con.Open();
string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+fPath+"';Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection (mystring);
OleDbDataAdapter myDa =new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
DataSet myDs =new DataSet();
myDa.Fill(myDs);
if(myDs.Tables[0].Rows.Count > 0)
{
string strSql = "";
string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";
OleDbConnection conn =new OleDbConnection(CnnString);
conn.Open ();
OleDbCommand myCmd =null;
for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一個作業表中行數,不包括第一行,
{
strSql="insert into txtInsert(id,name) values (";
strSql += myDs.Tables[0].Rows[i].ItemArray[0].ToString() + ", '";
strSql += myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "')";
myCmd=new OleDbCommand(strSql,conn);
try
{
myCmd.ExecuteNonQuery();
Response.Write("<script language=javascript& gt;alert('資料匯入成功!')</script>");
}
catch (OleDbException err)
{
Response.Write("匯入資料庫時出錯:" +err.ToString());
break;
}
}
conn.Close();
如有前輩路過,請指點一二,感激不盡
uj5u.com熱心網友回復:
上圖為Delphi所寫,沒有原始碼,所以也沒法
uj5u.com熱心網友回復:
匯入的問題,與你在程式里用ADO.NET沒啥區別的
無非就是你把資料讀到DataTable里,然后Insert into 到資料庫里,ADO.NET用法都是一樣的
非要說有區別,就是你需要從檔案里把資料讀進來
不知道你從什么檔案匯入,Excel ? txt?
uj5u.com熱心網友回復:
目前是想從TXT匯入,請問ADO.net如何使用呢?如果了解了想寫判斷選擇,謝謝
uj5u.com熱心網友回復:
您說的是直接while檢測,然后直接使用insert into一條一條資料匯入是嗎?這樣我如何選擇文本中的列呢?
uj5u.com熱心網友回復:
一次一潭訓圈寫入時最常規的做法,不建議你這么干,每次打開一個連接很消耗資源的;
常用的做法時拼SQL陳述句,但是如果資料量比較大的話,不要一次全拼出來,要分段;
如果你用一些O/RM框架的話,這個程序會很簡單
uj5u.com熱心網友回復:
匯入的問題,與你在程式里用ADO.NET沒啥區別的
無非就是你把資料讀到DataTable里,然后Insert into 到資料庫里,ADO.NET用法都是一樣的
非要說有區別,就是你需要從檔案里把資料讀進來
不知道你從什么檔案匯入,Excel ? txt?
您說的是直接while檢測,然后直接使用insert into一條一條資料匯入是嗎?這樣我如何選擇文本中的列呢?
一次一潭訓圈寫入時最常規的做法,不建議你這么干,每次打開一個連接很消耗資源的;
常用的做法時拼SQL陳述句,但是如果資料量比較大的話,不要一次全拼出來,要分段;
如果你用一些O/RM框架的話,這個程序會很簡單
謝謝
,ORM框架不了解,我去了解下,實在不行我再看看幫助檔案有沒有合適的指令,畢竟初學,先完成目的在追求效率
uj5u.com熱心網友回復:
微軟得EF,其他的Dapper,好像叫這個,還有個sugar?后兩個我沒用過不知道怎么具體怎么樣,不過EF完成你這件事是很簡單的,把資料弄到一個List<T>里邊,附加到DbContext上,然后Save一下就搞定了
uj5u.com熱心網友回復:
微軟得EF,其他的Dapper,好像叫這個,還有個sugar?
后兩個我沒用過不知道怎么具體怎么樣,不過EF完成你這件事是很簡單的,把資料弄到一個List<T>里邊,附加到DbContext上,然后Save一下就搞定了
好的,我去了解下EF看看如何使用,畢竟大多數情況都是用微軟的,謝謝
uj5u.com熱心網友回復:
額,我之前說的簡單是只提交比較簡單具體用起來的話,你這個需求用有點麻煩的,因為你需要為你匯入的資料寫個Model,如果匯入的資料列是可變的就麻煩了
uj5u.com熱心網友回復:
額,我之前說的簡單是只提交比較簡單
具體用起來的話,你這個需求用有點麻煩的,因為你需要為你匯入的資料寫個Model,如果匯入的資料列是可變的就麻煩了
意思就是只能用于固定格式是嗎?我有一個Delphi寫的程式,可以任意選擇列,但是沒原始碼而且不了解Delphi,原始碼應該也不是很復雜,我認為只是語法加SQL陳述句而已,只是我了解,所以還不知道如何實作,我繼續找找資料看看,也看看有沒有路過的指點一二,謝謝啦
uj5u.com熱心網友回復:
dataset 后就搞定了唄uj5u.com熱心網友回復:
建議自己組合Insert into SQL 就可以了做一個回圈抓文本檔案,再把文本檔案轉成Insert into SQL
uj5u.com熱心網友回復:
dataset 后就搞定了唄
謝謝,使用DataSet可以解決,已滿足需求,萬分感激??
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/81435.html
標籤:C#
上一篇:SocketException: 由于套接字沒有連接并且(當使用一個 sendto 呼叫發送資料報套接字時)沒有提供地址,發送或接收資料的請求沒有被接受。
下一篇:學生資訊管理
