<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                導入數據 可以分兩步:1、從 excel 導入數據到 datagridview 控件中,2、從 datagridview 控件導入數據庫 # 1、打開 excel 文件并顯示在dataGridView控件中 excel 導入失敗時: ``` System.InvalidOperationException:“未在本地計算機上注冊“Microsoft.ACE.OLEDB.12.0”提供程序。” ``` 此時下載插件安裝,方法如下。 https://blog.csdn.net/stableboy/article/details/80405144 http://www.microsoft.com/downloads/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d&displayLang=zh-cn 如果安裝后還是提示“未在本地計算機上注冊“Microsoft.ACE.OLEDB.12.0”,原因是用 64位的系統要啟用 32位的程序,就會出錯。則可以換一種方式啟用: 在visual 的項目屬性設置中,將平臺目標設置為 x64 [https://blog.csdn.net/yyzzhc999/article/details/79367114](https://blog.csdn.net/yyzzhc999/article/details/79367114) ![](https://img.kancloud.cn/5f/45/5f458f16ca68569847a02c6d11cac1cf_327x506.png) ![](https://tva1.sinaimg.cn/large/006y8mN6gy1g78krprfx2j30k10as0ty.jpg) 或者調用 C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe來執行package。 ![](https://img.kancloud.cn/3d/92/3d924fbdb37e1e6354a83640996204f3_835x398.png) 完整代碼如下: ``` public DataSet getData()//獲取數據,這部分單獨寫出來,然后在后續其他地方直接用 { //1、打開文件 OpenFileDialog fd = new OpenFileDialog(); fd.ShowDialog(); fd.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls"; // filter過濾器,只允許選excel文件 var path = fd.FileName;//獲取文件名 string filesuffix = System.IO.Path.GetExtension(path);//獲取文件擴展名 if (string.IsNullOrEmpty(filesuffix)) { return null; } //2、生成dataset臨時表格 using (DataSet ds = new DataSet()) { //判斷excel是.xlsx還是.xls,兩個版本的excel處理不一樣 string connString = ""; if(filesuffix == ".xls") { connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; } else { connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; } //讀取文件 string sql_select = "select * from [sheet1$]"; using (OleDbConnection conn = new OleDbConnection(connString)) using (OleDbDataAdapter da = new OleDbDataAdapter(sql_select, conn)) // 這兩句using之間沒有符號,不然會錯 { conn.Open(); da.Fill(ds, "from_excel"); } if(ds == null || ds.Tables.Count <=0) { return null; } else { return ds; } } } private void btn_打開_Click(object sender, EventArgs e) { dataGridView1.DataSource = null; System.Data.DataTable dt = getData().Tables["from_excel"]; dataGridView1.DataSource = dt; } ``` # 2、datagridview更新到數據庫 https://blog.csdn.net/xiongyongting/article/details/54170159 https://blog.csdn.net/foreverling/article/details/37376675 https://www.cnblogs.com/kongxiaoshuang/p/6062368.html # 3、第二步中用數組插入到 c# 的dataGridView 控件中 https://zhidao.baidu.com/question/42361870.html ### 關鍵是設置連接字符串 可以理解為 excel 也是 access 數據庫的一種,所以要提供的是 provider,以及 DataSource ![](https://box.kancloud.cn/e8336f6e20762bef9d928e5a20381728_818x439.png) ``` private void button1\_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "表格(\*.xls)|\*.xls"; string strPath; if (ofd.ShowDialog()== DialogResult.OK ; { try { strPath = ofd.FileName; // 這一行要在打開以后才有,所以不能寫在“if (ofd.ShowDialog()== DialogResult.OK )”前面 string strCon = "provider = microsoft.jet.oledb.4.0; data source = " + strPath + "; extended properties = excel 8.0"; OleDbConnection oleconn = new OleDbConnection(strCon); string strsql = "select \* from \[Sheet2$\]"; OleDbDataAdapter da = new OleDbDataAdapter(strsql ,strCon); DataSet ds = new DataSet(); da.Fill(ds, "new\_table3"); dataGridView1.DataSource = ds.Tables\["new\_table3"\]; } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } } ``` # 4、如何真正把 excel 數據更新到數據庫中 參考:項目管理臺賬.csv-登錄窗口 [https://www.cnblogs.com/dylanblog/p/4284016.html](https://www.cnblogs.com/dylanblog/p/4284016.html) [https://www.cnblogs.com/yechangzhong-826217795/p/11077125.html](https://www.cnblogs.com/yechangzhong-826217795/p/11077125.html) 思路: 1. 導入 excel 表格,形成臨時表 dataTable dt。 2. 從 dt 導入 dbo 中, 不要一條條復制數據,直接批量從 dt 到 dbo!! 以下是錯誤示范: ### 方法 1:sqlAdapter 方法 先寫下面這些 ![](https://img.kancloud.cn/32/27/3227c5303d5cb87eff7d46d872bcef72_777x467.png) 然后再在必要的地方寫一個循環 ![](https://img.kancloud.cn/32/d8/32d8fc89643276d6c65a01e93a5c6f9f_381x108.png) 但有個不好,每次插入一行,都必須打開一次 sql,6000行數據直接卡死。 ### 方法 2: 用sqlCommand.ExecuteNonQuery()方法 cmd.ExecuteNonQuery() 也卡死 ### 方法 3:用sqlBulkCopy() [https://www.cnblogs.com/zhaoshujie/p/9691010.html](https://www.cnblogs.com/zhaoshujie/p/9691010.html) 下面這個比較短: [https://www.cnblogs.com/fanqf/p/9026316.html](https://www.cnblogs.com/fanqf/p/9026316.html) ### 推薦方法 4:用 dt 表更新 1. excel 與dbo分別生成 dt1, dt2 ![](https://img.kancloud.cn/f9/cf/f9cffd72bb28949394e227fbc9ff8e33_686x493.png) 2. 清空 dt2里面的東西,將dt1 里面的東西復制到 dt2中 3. 將dt2更新回數據庫。 詳見 可以封裝ddd(),返回值為 dataTable ![](https://img.kancloud.cn/a8/8a/a88a22a7ccc82b5d46b5f6d449b1fe35_815x234.png) 然后在 button 中調用 ddd()。 ![](https://img.kancloud.cn/30/b4/30b414eae1ab039e2b644ee5be5aca80_599x119.png) 但有個問題,這樣生成以后,ddd 中的da,有可能在 button 就失效了,一旦失效,那么 da 與 dt 脫節,則 dt 就無法通過 da 再更新回數據庫。 > **解決辦法:修改 ddd,使得返回類型為 dataSet,而不是dt,這樣即使脫離 ddd,ds 也可以繼續有效,那么 button 中的 dt 還是可以與數據庫有聯系的,能繼續用** ![](https://img.kancloud.cn/a4/31/a4311d89b6a258753cc7ed6e4224999d_900x633.png) 但也要考慮功能性的問題,如果功能集中,那么就不利于調用。 ## 更新遇到問題: dt 無法更新到 sql 中:如果按下文寫的,那么 da 還是原來的 da,并不是更新以后的。所以這三條語句必須合起來寫。 ![](https://tva1.sinaimg.cn/large/006y8mN6gy1g8ckm2k1uyj30lw09vgnd.jpg) 但不能重復寫兩個 da,怎么辦?解決辦法:前面的用sqlcommand連接。 [https://www.cnblogs.com/MR-Lee/articles/2312062.html](https://www.cnblogs.com/MR-Lee/articles/2312062.html) ![](https://tva1.sinaimg.cn/large/006y8mN6gy1g8ckk9crdyj30oi0ccmyw.jpg) > 詳見 連接測試.cs - 導入 excel,或 項目管理臺賬.cs-公共 ``` //導入dbo數據 SqlConnection sqlconn = new SqlConnection("server = "); string pagename = this.tabControl1.SelectedTab.Text; SqlCommand sqlcomm = new SqlCommand("select \* from dbo.階段評估", sqlconn); sqlconn.Open(); SqlDataReader sqlrd = sqlcomm.ExecuteReader(); DataTable dt2 = new DataTable(); dt2.Load(sqlrd); //修改dt中的數據 for (int i = 0; i < dt2.Rows.Count;i++) { DataRow dr2 = dt2.Rows\[i\]; if (Convert.ToString( dr2\["項目編號"\]) == "1533023") { dr2.Delete(); } } //將修改后的dt寫回sql中。這三行一定要寫一起,如果把da寫到前面第一步,則update就毫無意義,因為識別的還是原來沒修改之前的da SqlDataAdapter da2 = new SqlDataAdapter(sqlcomm); SqlCommandBuilder sqlcmdB = new SqlCommandBuilder(da2); da2.Update(dt2); MessageBox.Show("更新成功"); ``` ## 問題 System.InvalidOperationException:“對于不返回任何鍵列信息的 SelectCommand,不支持 UpdateCommand 的動態 SQL 生成。” 解決辦法:數據庫主鍵沒設置,要設置好,這樣避免數據重復。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看