九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Excel導入數據到數據庫
一直就很想將自己學習的心得記錄下來,但一直就是沒空。剛剛把Excel導入導出數據庫以及在線編輯的問題解決,就抽空將自己遇到的困難以及自己是如何解決的記錄了下來。

       一:Excel導入數據到數據庫

     最開始是在網上搜到了一段代碼,大致的思路是這樣的:先獲得Excel文件以及其路徑,然后調用一個自定義的方法將表內的內容填充到DataSet對象中,接著就讀取DataSet對象中的每一行與每一列分別賦給數據庫的各個字段最后調用SQL語句插入。但是由于這個項目使用三層架構開發(fā)的,很多數據庫的字段都被封裝好了,在自己定義的類內無法訪問(初次接觸三層架構,或許是因為自己還不知道訪問的方法)后來就一直卡在這兒了,后來問了彭威學長,他建議我換一種導入的方法,然后將他以前寫的導入的類拿過來給我參考,不過是C/S類型的而且是沒有注釋。后來整整花了我一個晚上的時間才將他的代碼整理成我們可以用的。代碼如下:

using System;
using System.Data;
using System.IO;
using System.Configuration;
using System.Web;
using System.Data.OleDb;
using System.Threading;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace Basketball.Web
{
    public class To_data
    {
        protected Thread Leading;//定義一個線程
        private DataSet dsforloading = new DataSet();//聲明一個DataSet對象
        private int GetSheetIndex(byte[] FindTarget, byte[] FindItem)//獲取表的索引
        {
            int index = -1;
            int FindItemLength = FindItem.Length;
            if (FindItemLength < 1) return -1;
            int FindTargetLength = FindTarget.Length;
            if ((FindTargetLength - 1) < FindItemLength) return -1;

            for (int i = FindTargetLength - FindItemLength - 1; i > -1; i--)
            {
                System.Collections.ArrayList tmpList = new System.Collections.ArrayList();
                int find = 0;
                for (int j = 0; j < FindItemLength; j++)
                {
                    if (FindTarget[i + j] == FindItem[j]) find += 1;
                }
                if (find == FindItemLength)
                {
                    index = i;
                    break;
                }
            }
            return index;
        }
        //獲得excel表的名稱(一個Excel文件里面或許有多張表)
        private string GetSheetName(string filePath)
        {
            string sheetName = "";
            try
            {
                FileStream tmpStream = File.OpenRead(filePath);//打開并讀取Excel文件
                byte[] fileByte = new byte[tmpStream.Length];
                tmpStream.Read(fileByte, 0, fileByte.Length);//以Byte的形式讀取文件
                tmpStream.Close();
                byte[] tmpByte = new byte[]{Convert.ToByte(11),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),
                Convert.ToByte(11),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),Convert.ToByte(0),
                Convert.ToByte(30),Convert.ToByte(16),Convert.ToByte(0),Convert.ToByte(0)};
                int index = GetSheetIndex(fileByte, tmpByte);//獲得表的索引
                if (index > -1)
                {

                    index += 16 + 12;
                    System.Collections.ArrayList sheetNameList = new System.Collections.ArrayList();

                    for (int i = index; i < fileByte.Length - 1; i++)
                    {
                        byte temp = fileByte[i];
                        if (temp != Convert.ToByte(0))
                            sheetNameList.Add(temp);//添加到表名
                        else
                            break;
                    }
                    byte[] sheetNameByte = new byte[sheetNameList.Count];
                    for (int i = 0; i < sheetNameList.Count; i++)
                        sheetNameByte[i] = Convert.ToByte(sheetNameList[i]);

                    sheetName = System.Text.Encoding.Default.GetString(sheetNameByte);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            return sheetName;
        }
        private void TransferData(string excelFile, string sheetName, string tablename, string connectionString)
        {
            try
            {
                //獲取全部數據
                string strConn = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", excelFile);//建立連接Excel文件的字符串
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                string strExcel = "";
                OleDbDataAdapter myCommand = null;//聲明讀取Excel文件的對象并初始化
                strExcel = String.Format("select * from [{0}$]", sheetName);//建立讀取內容的字符串
                myCommand = new OleDbDataAdapter(strExcel, strConn);
                myCommand.Fill(dsforloading, sheetName);//調用讀取Excel文件對象的Fill方法將表內容填充到DataSet對象中去,Excel中的數據自此就都進入了DataSet對象中
                string filter = dsforloading.Tables[0].Columns[1].ColumnName + " IS NOT NULL";//過濾不符合要求的內容
                DataTable dt = dsforloading.Tables[0].Clone();//將DataSet對象中克隆到DataTable對象
                foreach (DataRow dr in dsforloading.Tables[0].Select(filter))
                {
                    dt.ImportRow(dr);//完成數據的復制
                }

                //用bcp導入數據
                using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))//實現數據的批量輸入
                {
                    bcp.BatchSize = 100;//每次傳輸的行數
                    bcp.NotifyAfter = 100;//進度提示的行數
                    bcp.DestinationTableName = tablename;//目標表
                    bcp.WriteToServer(dt);//完成復制
                }
              //  MessageBox.Show("導入成功!");
            }
            catch (Exception ex)
            {
                throw ex;//拋出異常在頁面后臺代碼中捕獲
            }
            finally
            {
                Leading.Abort();//終止線程
            }
        }
        protected void LoadDataToSql(string tablename,string path)//參數為數據庫表名以及Excel文件名稱
        {//將Excel文件的內容導入數據庫函數,到時在頁面后天代碼中只用調用該函數即可
            TransferData(path, GetSheetName(path), tablename, ConfigurationManager.AppSettings["ConnectionString"]);//最后一個參數為數據庫連接的字符串,數據庫連接實在Web.Config文件中配置的
        }
    }
}

體會:花了一天半的時間才完成公共類的一個函數,并且還累的要命?;蛟S對于初次做項目的人來說就是這么難吧!很多技術都不知道,當出現了bug的時候有時得花幾個小時甚至幾天來調試。最近明顯感覺睡眠質量提升了,或許就是每天大負荷量的腦力勞動吧!沒辦法,這就是程序員的生活,誰叫自己從事的是這個行業(yè)呢!總之加油吧!

我選擇我喜歡~~~

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一個SNMP類
枚舉類型
C#中byte[]與string的轉換
字符串string和內存流MemoryStream及比特數組byte[]互轉比轉換
C# byte[]轉string, string轉byte[] 的四種方法
VB.NET 對字符串進行加密和解密的方法
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服