主頁 > .NET開發 > c#中如何讀取wps中的excel表格資料

c#中如何讀取wps中的excel表格資料

2020-09-13 08:57:19 .NET開發

c#中如何將wps中的excel表格資料讀取出來存入dataset中,程式讀取office excel表格資料沒有問題,讀取WPS的excel表格資料就無法讀取到!!新手求各位大神指教!!!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
//using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;

namespace 簡單對號
{
    public partial class checkNum : Form
    {
        string strBox = "";//存盤值,顯示到richtextbox文本框中
        int i = 0;  //統計掃描多少條資料
        public checkNum()
        {
            InitializeComponent();
        }

        static DataSet getExcelDataResult = new DataSet();//設定一個變數存盤表格getData()的回傳值
       // static DataTable myTable=new DataTable();
        DataView myDataView = new System.Data.DataView();
       
        //獲取datatable資料的透視表
        private DataView getDataViewResult(DataTable dt,string strRowFilter)
        {
            DataView myDataView = null;
            try
            {
                //dt = getExcelDataResult.Tables[0];

                myDataView = new System.Data.DataView(dt); //dataview資料透視表篩選datatable中的資料,效率提高很多,比用回圈遍歷快,15000條資料回圈遍歷3秒,dataview零點幾秒
                myDataView.RowFilter = strRowFilter;//dataview中的  RowFilter屬性:后跟一個運算子和值要作為篩選依據的列的名稱。 值必須在引號中。 例如:"LastName = Smith"
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("錯誤資訊:" + ex.Message, "出現錯誤");
            }
            return myDataView;
        }

        private void imei1KeyPress(object sender, KeyPressEventArgs e)
        {

                myDataView = null;

                resultBox.Text = "";
                //背景色還原初始狀態
                resultBox.BackColor = SystemColors.Control;
                //獲得屬性中設定的字體,大小,風格
                //判斷是否回車按下,e為控制元件傳入的一個物件,里面用戶存有按下的鍵的char值
                //通過Convert.ToChar(System.Windows.Forms.Keys.Enter)我們可以得到Enter鍵的char值
                //.Enter可替換為其他按鍵
                //imei1txt.Focus();
                if ((imei1txt.Text.Length != 0) && (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter)))
                {
                    try
                    {
                        string strRowFilter = "F1='" + imei1txt.Text + "'"; //dataview資料透視表查詢條件
                        myDataView = getDataViewResult(getExcelDataResult.Tables[0], strRowFilter);
                        if (myDataView[0]["F1"].ToString() != "")
                        {
                            dataGridView1.DataSource = myDataView;
                            //entenr鍵按下,聚焦imei2文本框,同時選中imei2文本框
                            imei2txt.Focus();
                            imei2txt.SelectAll();
                        }                        
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("錯誤資訊:imei:"+imei1txt.Text+"不存在資料源中!!!" , "錯誤資訊");
                        imei1txt.SelectAll();
                    }
                }
        }

        private void imei2KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                // 
                if ((imei1txt.Text.Length != 0)&&(imei2txt.Text.Length != 0) && (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter)))
                {
                    //獲取dataview中的資料
                    //寫法一:寫法清晰
                    //string dvImei = dv.Table.Rows[0]["imei"].ToString();

                    //寫法二:寫法短,效率會相應提高
                    string dvImei = myDataView[0][0].ToString();
                    string dvSn = myDataView[0][1].ToString();

                    //測驗使用:判斷是否能讀取到imei和sn
                    //textBox1.Text = dvImei + "\t" + dvSn;
                    if (dvSn == imei2txt.Text.ToString())
                    {
                        resultBox.Text = "PASS";
                        //設定背景色
                        resultBox.BackColor = System.Drawing.Color.Chartreuse;
                        //獲得屬性中設定的字體,大小,風格
                        resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
                        //將值寫入本地文本檔案
                        string str = imei1txt.Text + "\t" + imei2txt.Text + "\r\n";
                        File.AppendAllText("result.txt", str);
                        strBox += str;
                        showBox.Text = strBox;  //追加文本框內容
                        i++;
                        totalLab.Text = "總計" + i + "行";
                    }
                    else
                    {
                        resultBox.Text = "FAIL";
                        //設定背景色
                        resultBox.BackColor = System.Drawing.Color.Red;
                        //獲得屬性中設定的字體,大小,風格
                        resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
                    }
                }
                else
                {
                    //當enter鍵按下后才顯示判斷結果
                    if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
                    {
                        resultBox.Text = "FAIL";
                        //設定背景色
                        resultBox.BackColor = System.Drawing.Color.Red;
                        //獲得屬性中設定的字體,大小,風格
                        resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
                    }
                }
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message, "錯誤資訊");
                resultBox.Text = "FAIL";
                //設定背景色
                resultBox.BackColor = System.Drawing.Color.Red;
                //獲得屬性中設定的字體,大小,風格
                resultBox.Font = new Font(resultBox.Font.Name, resultBox.Font.Size, resultBox.Font.Style);
            }
           
          
            
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                //entenr鍵按下,聚焦imei1文本框,同時選中imei1文本框
                imei1txt.Text = "";
                imei2txt.Text = "";
                imei1txt.Focus();
                imei1txt.SelectAll();
            }
        }

        //表單加載事件
        private void checkNum_Load(object sender, EventArgs e)
        {
            dataGridView1.ClearSelection();//表單加載前先清除所有內容
            string filePath = Application.StartupPath + "\\data\\data.xls";//檔案路徑
           // string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Extended Properties=Excel 8.0;";//excel表格連接字串
            //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filePath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此連接只能操作Excel2007之前(.xls)檔案
            string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filePath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此連接可以操作.xls與.xlsx檔案
            OleDbConnection conn = new OleDbConnection(strConn);
            try
            {
                conn.Open();//打開連接
                //回傳Excel的架構,包括各個sheet表的名稱,型別,創建時間和修改時間等
                DataTable dtExcName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });


                //包含excel中表名的字串陣列
                string[] strTableNames = new string[dtExcName.Rows.Count];
                for (int i = 0; i < dtExcName.Rows.Count; i++)
                {
                    strTableNames[i] = dtExcName.Rows[i]["TABLE_NAME"].ToString();
                }
                string strSql = "select * from [" + strTableNames[0] + "]";//表名的寫法也應注意不同,對應的excel表為sheet1,在這里要在其后加美元符號¥,并用中括號
                OleDbCommand cmd = new OleDbCommand(strSql, conn);//建立執行命令
                OleDbDataAdapter oda = new OleDbDataAdapter(cmd);//建立資料配接器


                oda.Fill(getExcelDataResult, "myTable");//把資料配接器中的資料讀到資料集匯總的一個表中(此處表名為shyman,可以任取表名)
                //指定datagridview1的資料源為資料集ds的第一張表(也就是shyman表),也可以寫ds.Table["shyman"]
                dataGridView1.DataSource = getExcelDataResult.Tables[0];

            }
            catch (Exception ex)
            {
                MessageBox.Show("錯誤資訊:未找到資料源或excel表格格式不正確(excel需2003格式)!!!");
            }
            finally
            {
                conn.Close();
            }        
        }       
    }
}

uj5u.com熱心網友回復:

1. 首先將wps的相關COM組件添加至參考。project -> add reference -> com-> Kingsoft ET 2.0 Object Library.

2. 代碼中添加using KSO; using ET;

3. 打開xls檔案的相關代碼:

ET.Application etApp;
ET.workbook etbook;
ET.Worksheet etsheet ;
ET.Range etrange;
//獲取作業表表格
etApp = new ET.Application();
etbook = (ET.workbook)etApp.Workbooks.Open(@"c:\file.xls");

//獲取資料區域
etsheet = (ET.Worksheet)etbook.Worksheets.get_Item(1);

//獲取資料區域 
etrange = (ET.Range)etsheet.UsedRange;

4. 讀取某單元格的資料內容:

string strData = ((ET.Range)etrange.get_Item(i, j)).Text;

5. 寫入某單元格的資料內容:

((ET.Range)etrange.get_Item(i, j)).Value = strData;

6. 關閉檔案及相關資源:

etbook.Close();
etApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(etrange);
System.Runtime.InteropServices.Marshal.ReleaseComObject(etsheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(etbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(etApp);



以下代碼是可以運行的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KSO;
using ET;

namespace TestWPS
{
    public partial class Form1 : Form
    {
        ET.Application objApp = null;
        ET._Workbook objWorkBook = null;
        ET.Worksheet objWorkSheet = null;
        public Form1()
        {
            InitializeComponent();
        }
        private void  exportWPS_excel(DataTable dt)
        {
            object missing = Type.Missing;
            ET.Range objRange = null;

            try
            {
                objApp = new ET.Application();

                objWorkBook = objApp.Workbooks.Add(Type.Missing);
                objWorkSheet = objWorkBook.ActiveSheet;

                //設定標題
                objWorkSheet.get_Range("A1", "G1").Merge(true);        //先進行單元合并
                objRange = objWorkSheet.get_Range("A1", "A1");
                objRange.Value2 = "表 格 示 例";    //設定合并后的單元格的文本
                objRange.RowHeight = 40;        //設定行高
                //設定字體
                objRange.Font.Name = "宋體";
                objRange.Font.Size = 20;
                objRange.Font.Bold = true;
                objRange.HorizontalAlignment = ET.ETHAlign.etHAlignCenter;    //設定字體對其方向

                objRange = objWorkSheet.get_Range("A2", "G7");
                objRange.Borders.LineStyle = ET.ETLineStyle.etContinuous;
                objRange.Borders.Weight = ET.ETBorderWeight.etThin;
                objRange.RowHeight = 17;
                objRange.Borders.Color = 0;        //設定邊框的顏色,顏色的值可以按照B,G,R的方式合成
                //設定表格的外邊框,加粗
                objRange.Borders[ET.ETBorderIndex.etEdgeBottom].Weight = ET.ETBorderWeight.etMedium;
                objRange.Borders[ET.ETBorderIndex.etEdgeLeft].Weight = ET.ETBorderWeight.etMedium;
                objRange.Borders[ET.ETBorderIndex.etEdgeRight].Weight = ET.ETBorderWeight.etMedium;
                objRange.Borders[ET.ETBorderIndex.etEdgeTop].Weight = ET.ETBorderWeight.etMedium;
                objRange.HorizontalAlignment = ET.ETHAlign.etHAlignCenter;
                objRange.Font.Name = "宋體";
                objRange.Font.Size = 10;

                string name = dt.Rows[0][0].ToString();

                objWorkSheet.get_Range("A2", "A2").Value2 = "姓    名";
                objWorkSheet.get_Range("A2", "A2").ColumnWidth = 60;

                objWorkSheet.get_Range("B2", "B2").ColumnWidth = 75;
                objWorkSheet.get_Range("B2", "B2").Value2 = name;
                

                objWorkSheet.get_Range("C2", "C2").Value2 = "性    別";
                objWorkSheet.get_Range("C2", "C2").ColumnWidth = 60;

                objWorkSheet.get_Range("D2", "D2").ColumnWidth = 75;
                objWorkSheet.get_Range("D2", "D2").Value2 = dt.Rows[0][1].ToString();

                objWorkSheet.get_Range("E2", "E2").Value2 = "出生年月";
                objWorkSheet.get_Range("E2", "E2").ColumnWidth = 60;

                objWorkSheet.get_Range("F2", "F2").ColumnWidth = 75;
                objWorkSheet.get_Range("F2", "F2").Value2 = dt.Rows[0][2].ToString();

                objWorkSheet.get_Range("G2", "G7").Merge(false);
                objWorkSheet.get_Range("G2", "G2").ColumnWidth = 80;
                objWorkSheet.get_Range("G2", "G2").Value2 = "照片";

                objWorkSheet.get_Range("A3", "A3").Value2 = "民    族";
                objWorkSheet.get_Range("B3", "B3").Value2 = dt.Rows[0][3].ToString();

                objWorkSheet.get_Range("C3", "C3").Value2 = "政治面貌";
                objWorkSheet.get_Range("D3", "D3").Value2 = dt.Rows[0][4].ToString();

                objWorkSheet.get_Range("E3", "E3").Value2 = "籍    貫";
                objWorkSheet.get_Range("F3", "F3").Value2 = dt.Rows[0][5].ToString();

                objWorkSheet.get_Range("A4", "A4").Value2 = "學    歷";
                objWorkSheet.get_Range("B4", "B4").Value2 = dt.Rows[0][6].ToString();

                objWorkSheet.get_Range("C4", "C4").Value2 = "固定電話";
                objWorkSheet.get_Range("D4", "D4").Value2 = dt.Rows[0][7].ToString();

                objWorkSheet.get_Range("E4", "E4").Value2 = "移動電話";
                objWorkSheet.get_Range("F4", "F4").Value2 = dt.Rows[0][8].ToString();

                objWorkSheet.get_Range("A5", "A5").Value2 = "畢業院校";
                objWorkSheet.get_Range("B5", "F5").Merge(false);
                objWorkSheet.get_Range("B5", "B5").Value2 = dt.Rows[0][9].ToString();

                objWorkSheet.get_Range("A6", "A6").Value2 = "家庭住址";
                objWorkSheet.get_Range("B6", "F6").Merge(false);
                objWorkSheet.get_Range("B6", "B6").Value2 = dt.Rows[0][10].ToString();

                objWorkSheet.get_Range("A7", "A7").Value2 = "Email";
                objWorkSheet.get_Range("B7", "F7").Merge(false);
                objWorkSheet.get_Range("B7", "B7").Value2 = dt.Rows[0][11].ToString();

                objWorkBook.SaveAs(string.Format("D:\\{0}.xls", name), missing, missing, missing, missing, missing, ET.ETSaveAsAccessMode.etExclusive, missing, missing, missing, missing);
                objWorkBook.Close(missing, missing, missing);
            }
            finally
            {
                ReleaseComObject(objRange);
                ReleaseComObject(objWorkSheet);
                ReleaseComObject(objWorkBook);
            }
        }

        private void ReleaseComObject(object obj)
        {
            if (obj != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
        }

        /// <summary>
        /// 將DataTable的資料匯出顯示為報表(使用WPS)
        /// </summary>
        /// <param name="dt">要匯出的資料</param>
        /// <param name="strTitle">匯出報表的標題</param>
        /// <param name="FilePath">保存檔案的路徑</param>
        /// <returns></returns>
        public string OutputWPSExcel(System.Data.DataTable dt, string strTitle, string FilePath)
        {
            DateTime beforeTime = DateTime.Now;
            object missing = Type.Missing;
            ET.Range objRange = null;
            string filename = "";
            try
            {
                objApp = new ET.Application();

                objWorkBook = objApp.Workbooks.Add(Type.Missing);
                objWorkSheet = objWorkBook.ActiveSheet;
                int rowIndex = 4;
                int colIndex = 1;
                //取得列標題
                foreach (DataColumn col in dt.Columns)
                {
                    colIndex++;
                    //excel.Cells[4, colIndex]
                    objWorkSheet.Cells[4,colIndex] =  col.ColumnName;
                    //設定標題格式為居中對齊

                    Range range = objWorkSheet.get_Range((object)objWorkSheet.Cells.get_Item(4, colIndex),(object) objWorkSheet.Cells.get_Item(4, colIndex));
                    range.Font.Bold = true;
                    range.HorizontalAlignment = ET.ETHAlign.etHAlignCenter;
                    range.Select();
                    //objWorkSheet.get_Range(objWorkSheet.Cells[4, colIndex], objWorkSheet.Cells[4, colIndex]).Interior.ColorIndex = titleColorindex;//19;//設定為淺黃色,共計有56種
                        
                }
                 //取得表格中的資料
                foreach (DataRow row in dt.Rows)
                {
                    rowIndex++;
                    colIndex = 1;
                    foreach (DataColumn col in dt.Columns)
                    {
                        colIndex++;
                        if (col.DataType == System.Type.GetType("System.DateTime"))
                        {
                            objWorkSheet.Cells[rowIndex, colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
                            objWorkSheet.get_Range((object)objWorkSheet.Cells.get_Item(rowIndex, colIndex), (object)objWorkSheet.Cells.get_Item(rowIndex, colIndex)).HorizontalAlignment = ET.ETHAlign.etHAlignCenter;//設定日期型的欄位格式為居中對齊
                        }
                        else
                            if (col.DataType == System.Type.GetType("System.String"))
                            {
                                Range txtRange = (Range)objWorkSheet.Cells[rowIndex, colIndex];
                                txtRange.NumberFormatLocal = "@";
                                objWorkSheet.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                                objWorkSheet.get_Range((object)objWorkSheet.Cells.get_Item(rowIndex, colIndex),(object) objWorkSheet.Cells.get_Item(rowIndex, colIndex)).HorizontalAlignment = ET.ETHAlign.etHAlignCenter;//設定字符型的欄位格式為居中對齊
                            }
                            else
                            {
                               

uj5u.com熱心網友回復:

用 NPOI 不行么?

uj5u.com熱心網友回復:

參考wps com庫,但是只有企業版支持

uj5u.com熱心網友回復:

你好,如果我電腦安裝了企業版的WPS,程式放到安裝WPS個人版的電腦上能讀取到資料么?

uj5u.com熱心網友回復:

參考 3 樓 caozhy 的回復:
參考wps com庫,但是只有企業版支持

你好,如果我電腦安裝了企業版的WPS,程式放到安裝WPS個人版的電腦上能讀取到資料么?

uj5u.com熱心網友回復:

問題已解決,謝謝各位大神的指點:是讀取表格資料的連接字串出了問題。
將string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filePath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'";
修改為 string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filePath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'";即可,這樣不管是office還是WPS的表格都能夠讀取到,不過我讀取的是2003版本的,沒有去讀取2007版本

uj5u.com熱心網友回復:

如果是vs2019要怎么操作呢

uj5u.com熱心網友回復:

沒有Kingsoft ET 2.0 Object Library.只有

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/22825.html

標籤:C#

上一篇:winform如何實作如圖效果

下一篇:如圖,這個電路板,我要是買一個這個能學到什么?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more