使用SqlCommandBuilder更新DataTable的原始碼
使用SqlCommandBuilder更新DataTable的原始碼,你可以選擇看,也可以不(技術共享) 首先說明一下,這一大堆東西是一堆共通函式拿出來的,由於時間倉促,所以有些地方還有很多改進的地方,個人認為很容易,看到老是有人問這些東西,所以特別貼出來,希望對大家有點幫助.
這個東西可能誰都會,但這是我自己的API,我拿出來共享,大家可以拿來就用.也可以編譯成為Dll,在中國的軟體環境中,我希望大家可以團結.
public void SaveDataFromDt(DataTable argdtData,string argstrTableName)//這裡的引數就是要更新的DataTable和要更新的表名
{
if(argdtData ==null)
{
throw new Exception("DataTable不存在!");
}
//下面是初始化資料庫連線自己設定吧
SqlConnection conn = new SqlConnection(“連線字串,這個不用寫了吧”);
SqlCommand scommGlobal;
Sql Transaction stracGlobal; //可以新增事物處理
SqlDataAdapter sdaGlobal;
//做一個DataTable,取資料庫中表名和主鍵用的
DataTable dtColStat;
//初始化這個DataTable
dtColStat = new DataTable();
//下面這個東西個人人為是精華
scommGlobal = new SqlCommand("select distinct objs.name as tblname,cols.name as colname,cols.colstat as colstat"+" from sysobjects objs join syscolumns cols on (objs.id=cols.id) "+" where colstat='1'",sconnGlobal);
//可以設定TimeOut,隨便寫吧
scommGlobal.CommandTimeout = 1000;
//初始化事物
scommGlobal.Transaction = stracGlobal;
sdaGlobal = new SqlDataAdapter(scommGlobal, conn);
try
{
//開啟資料連線,這個我就不寫了
//這裡拿到資料庫中所有的表名和主鍵
sdaGlobal.Fill(dtColStat);
}
catch(System.Exception ex)
{
//異常處理,自己寫吧
}
string strSelect; //準備用SelectCommand
string strStatColName=string.Empty; //準備得到的Column名稱
string strColName=string.Empty; StringBuilder sbCols = new StringBuilder(128);
DataRow[] drs = dtColStat.Select("tblname='"+ argstrTableName+"'");
if(drs.Length>0)
{
strStatColName = drs[0]["colstat"].ToString();
}
//下面拼裝Select語句,取出主鍵和要更新的所有Column
sbCols.Append("select ");
foreach(DataColumn dc in argdtData.Columns)
{
strColName = dc.ColumnName; if(strColName!=strStatColName)
{
sbCols.Append(strColName);
sbCols.Append(",");
}
}
if(sbCols.Length>7)
sbCols.Remove(sbCols.Length-1,1);
sbCols.Append(" from ");
sbCols.Append(argstrTableName);
strSelect = sbCols.ToString();
//設定SelectCommand
sdaGlobal.SelectCommand = new SqlCommand(strSelect,conn);
sdaGlobal.SelectCommand.Transaction = stracGlobal;
//重要的地方來了
SqlCommandBuilder scombuilder = new SqlCommandBuilder(sdaGlobal);
scombuilder.RefreshSchema();
//該生成可供執行的資料庫操作命令
sdaGlobal.UpdateCommand = scombuilder.GetUpdateCommand();
sdaGlobal.InsertCommand = scombuilder.GetInsertCommand();
sdaGlobal.DeleteCommand = scombuilder.GetDeleteCommand();
//可以設定一把TimeOut,隨便設定
sdaGlobal.UpdateCommand.CommandTimeout=1000;
sdaGlobal.InsertCommand.CommandTimeout=1000;
sdaGlobal.DeleteCommand.CommandTimeout=1000;
//可以加上你們事物
sdaGlobal.UpdateCommand.Transaction = stracGlobal;
sdaGlobal.DeleteCommand.Transaction = stracGlobal;
sdaGlobal.InsertCommand.Transaction = stracGlobal;
try
{
//資料庫連線就自己去寫吧
//可以進行更新了
sdaGlobal.Update(argdtData);
argdtData.AcceptChanges();
//關閉資料連線什麼的,我也不寫了,偷懶
}
catch(Exception ex)
{
//異常處理自己寫
}
}
到此結束,由於時間太短和公司的不方便(系統不是中文的,鬱悶ing,家裡開這個網站象牛一樣慢),所以到此為止,希望可以對大家有一些幫助,本人不是在炫耀什麼,因為我越來越明白,技術共享對程式設計師來說是多麼的重要(我需要的是完全的共享).由於是多個方法組合成了一個方法,所以可能會有不合適的地方,比如資料庫連線,事物什麼的以前都是全域性變數,大家可以從命名上看出來,這些程式碼本人在.net2002和2003版本甚至是在2005微軟2月預覽版中測試都沒問題,如果有問題希望大家可以DeBug一把,也就變數有些命名或者找不到什麼的錯誤,但是中心部分都沒有錯誤,如果大家需要原來完整的程式碼,我也可以貼出來,但是就太多了,還有別的邏輯在裡面,比如說,在更新資料之前,要對DataTable中所有的資料進行EndEdit();當然還有檢查DataTable中的資料有沒有做過更改,如果沒有更改就不進行任何更新,但是我都給省略了,祝大家好運. [@more@]
這個東西可能誰都會,但這是我自己的API,我拿出來共享,大家可以拿來就用.也可以編譯成為Dll,在中國的軟體環境中,我希望大家可以團結.
public void SaveDataFromDt(DataTable argdtData,string argstrTableName)//這裡的引數就是要更新的DataTable和要更新的表名
{
if(argdtData ==null)
{
throw new Exception("DataTable不存在!");
}
//下面是初始化資料庫連線自己設定吧
SqlConnection conn = new SqlConnection(“連線字串,這個不用寫了吧”);
SqlCommand scommGlobal;
Sql Transaction stracGlobal; //可以新增事物處理
SqlDataAdapter sdaGlobal;
//做一個DataTable,取資料庫中表名和主鍵用的
DataTable dtColStat;
//初始化這個DataTable
dtColStat = new DataTable();
//下面這個東西個人人為是精華
scommGlobal = new SqlCommand("select distinct objs.name as tblname,cols.name as colname,cols.colstat as colstat"+" from sysobjects objs join syscolumns cols on (objs.id=cols.id) "+" where colstat='1'",sconnGlobal);
//可以設定TimeOut,隨便寫吧
scommGlobal.CommandTimeout = 1000;
//初始化事物
scommGlobal.Transaction = stracGlobal;
sdaGlobal = new SqlDataAdapter(scommGlobal, conn);
try
{
//開啟資料連線,這個我就不寫了
//這裡拿到資料庫中所有的表名和主鍵
sdaGlobal.Fill(dtColStat);
}
catch(System.Exception ex)
{
//異常處理,自己寫吧
}
string strSelect; //準備用SelectCommand
string strStatColName=string.Empty; //準備得到的Column名稱
string strColName=string.Empty; StringBuilder sbCols = new StringBuilder(128);
DataRow[] drs = dtColStat.Select("tblname='"+ argstrTableName+"'");
if(drs.Length>0)
{
strStatColName = drs[0]["colstat"].ToString();
}
//下面拼裝Select語句,取出主鍵和要更新的所有Column
sbCols.Append("select ");
foreach(DataColumn dc in argdtData.Columns)
{
strColName = dc.ColumnName; if(strColName!=strStatColName)
{
sbCols.Append(strColName);
sbCols.Append(",");
}
}
if(sbCols.Length>7)
sbCols.Remove(sbCols.Length-1,1);
sbCols.Append(" from ");
sbCols.Append(argstrTableName);
strSelect = sbCols.ToString();
//設定SelectCommand
sdaGlobal.SelectCommand = new SqlCommand(strSelect,conn);
sdaGlobal.SelectCommand.Transaction = stracGlobal;
//重要的地方來了
SqlCommandBuilder scombuilder = new SqlCommandBuilder(sdaGlobal);
scombuilder.RefreshSchema();
//該生成可供執行的資料庫操作命令
sdaGlobal.UpdateCommand = scombuilder.GetUpdateCommand();
sdaGlobal.InsertCommand = scombuilder.GetInsertCommand();
sdaGlobal.DeleteCommand = scombuilder.GetDeleteCommand();
//可以設定一把TimeOut,隨便設定
sdaGlobal.UpdateCommand.CommandTimeout=1000;
sdaGlobal.InsertCommand.CommandTimeout=1000;
sdaGlobal.DeleteCommand.CommandTimeout=1000;
//可以加上你們事物
sdaGlobal.UpdateCommand.Transaction = stracGlobal;
sdaGlobal.DeleteCommand.Transaction = stracGlobal;
sdaGlobal.InsertCommand.Transaction = stracGlobal;
try
{
//資料庫連線就自己去寫吧
//可以進行更新了
sdaGlobal.Update(argdtData);
argdtData.AcceptChanges();
//關閉資料連線什麼的,我也不寫了,偷懶
}
catch(Exception ex)
{
//異常處理自己寫
}
}
到此結束,由於時間太短和公司的不方便(系統不是中文的,鬱悶ing,家裡開這個網站象牛一樣慢),所以到此為止,希望可以對大家有一些幫助,本人不是在炫耀什麼,因為我越來越明白,技術共享對程式設計師來說是多麼的重要(我需要的是完全的共享).由於是多個方法組合成了一個方法,所以可能會有不合適的地方,比如資料庫連線,事物什麼的以前都是全域性變數,大家可以從命名上看出來,這些程式碼本人在.net2002和2003版本甚至是在2005微軟2月預覽版中測試都沒問題,如果有問題希望大家可以DeBug一把,也就變數有些命名或者找不到什麼的錯誤,但是中心部分都沒有錯誤,如果大家需要原來完整的程式碼,我也可以貼出來,但是就太多了,還有別的邏輯在裡面,比如說,在更新資料之前,要對DataTable中所有的資料進行EndEdit();當然還有檢查DataTable中的資料有沒有做過更改,如果沒有更改就不進行任何更新,但是我都給省略了,祝大家好運. [@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/631872/viewspace-864908/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DataTable.js原始碼分析(一)JS原始碼
- Spring Boot + JPA DataTable原始碼Spring Boot原始碼
- jquery.dataTable.js 使用詳解 二、sDom佈局原始碼解析jQueryJS原始碼
- dataTable元件使用元件
- jQuery datatable 使用方法jQuery
- C# DataTable Compute方法的使用C#
- Koahub原始碼交易市場推出最新更新的wemall原始碼原始碼
- Flutter之DataTable使用詳解Flutter
- 使用HtmlAgilityPack將HtmlTable填入DataTableHTML
- 【Java X 原始碼剖析】Collection的原始碼分析-JDK1.8-仍在更新Java原始碼JDK
- 【Java X 原始碼剖析】Map的原始碼分析--JDK1.8-仍在更新Java原始碼JDK
- [原創]非常粗糙的FileFuzz原始碼[0325更新]原始碼
- MySQL的原始碼安裝及使用UDFs進行資料自動更新的教程MySql原始碼
- React 原始碼學習(八):元件更新React原始碼元件
- 深入Preact原始碼分析(4.20更新)React原始碼
- JSF中h:datatable使用問題JS
- DataTable.ImportRow()與DataTable.Rows.Add()的區別Import
- DataTable 排序排序
- DataTable排序排序
- WeMall商業版微信商城原始碼更新原始碼
- Vue 原始碼解讀(4)—— 非同步更新Vue原始碼非同步
- React原始碼分析 - 元件更新與事務React原始碼元件
- svn版本資訊自動更新到原始碼原始碼
- 【原始碼學習】window 的刪除及更新過程原始碼
- redis原始碼解析----epoll的使用Redis原始碼
- Picasso的使用和原始碼解析原始碼
- EventBus的使用和原始碼解析原始碼
- Hibernate Tools原始碼的使用原始碼
- underscorejs原始碼學習系列(未完,更新中)JS原始碼
- 從原始碼全面剖析 React 元件更新機制原始碼React元件
- nginx原始碼學習資源(不斷更新)Nginx原始碼
- DataTable中的select()用法
- TextWatcher的使用及原始碼解析原始碼
- InheritedWidget的使用和原始碼分析原始碼
- ThreadPoolExecutor的使用及原始碼分析thread原始碼
- Storm-原始碼分析-Thrift的使用ORM原始碼
- C#DataTable的用法詳解C#
- asp.net DataTable的常用操作ASP.NET