日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net中DataTable的保存

發布時間:2024/6/5 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net中DataTable的保存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總是非常懷念以前用PB寫數據庫應用的時候DataWindow功能的強大,現在用.Net開發系統的時候總感覺Microsoft提供的ADO.Net功能不夠強大,執行一些數據操作很是麻煩,就自己寫了一個自動生成更新DataTable的類,類源碼如下:

using System;

using System.Data;

using System.Data.SqlClient;

using Microsoft.ApplicationBlocks.Data;

using System.Collections;

using System.Text;

?

namespace DataAccess.SQLServerDAL

{

???? /// <summary>

???? /// SqlClass 的摘要說明。

???? /// </summary>

???? public class SqlClass

???? {

????????? #region 返回執行Insert操作的SqlCommand

?

???????? /// <summary>

???????? /// 返回執行Insert操作的SqlCommand

???????? /// </summary>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="columns">要更新的列名的數組</param>

???????? /// <param name="DbTypes">要更新的列的類型的數組</param>

???????? /// <param name="srcColumns">要更新的列對應于數據源中的列名的數組</param>

???????? /// <param name="identityCol">identity列</param>

???????? /// <param name="trans">事務對象</param>

???????? /// <returns>執行Insert操作的SqlCommand</returns>

???????? public static SqlCommand InsertCommand(SqlTransaction trans, string tablename, UpdateDataColumnCollection updateDataColumnCollection, string identityCol)

???????? {

????????????? StringBuilder insertString = new StringBuilder(), valueString = new StringBuilder();

????????????? SqlParameter MySqlParameter;

?

????????????? SqlCommand MyInsertCommand = new SqlCommand();

?

????????????? MyInsertCommand.Connection = trans.Connection;

????????????? MyInsertCommand.Transaction = trans;

?

????????????? insertString.Append("INSERT " + tablename + "(");

????????????? valueString.Append(") Values (");

?

????????????? foreach (UpdateDataColumn updateDataColumn in updateDataColumnCollection)

????????????? {

?????????????????? //對于IDENTITY列無需賦值

?????????????????? if (updateDataColumn.ColumnName != identityCol)

?????????????????? {

??????????????????????? insertString.Append("[" + updateDataColumn.ColumnName + "], ");

??????????????????????? valueString.Append("@" + updateDataColumn.ColumnName + ", ");

?

??????????????????????? MySqlParameter = new SqlParameter();

?

??????????????????????? MySqlParameter.ParameterName = "@" + updateDataColumn.ColumnName;

??????????????????????? MySqlParameter.SqlDbType = updateDataColumn.SqlDbType;

??????????????????????? MySqlParameter.Direction = ParameterDirection.Input;

??????????????????????? MySqlParameter.SourceColumn = updateDataColumn.SourceColumn;

??????????????????????? MySqlParameter.SourceVersion = DataRowVersion.Current;

??????????????????????

??????????????????????? MyInsertCommand.Parameters.Add(MySqlParameter);

?????????????????? }

????????????? }

?

????????????? insertString.Remove(insertString.Length - 2, 2);

????????????? valueString.Remove(valueString.Length - 2, 2);

?

????????????? insertString.Append(valueString.ToString() + ")");

?

????????????? if (identityCol != null && identityCol.Trim().Length > 0)

????????????? {

?????????????????? MySqlParameter = new SqlParameter();

?

?????????????????? MySqlParameter.ParameterName = "@" + identityCol;

?????????????????? MySqlParameter.SqlDbType = SqlDbType.Int;

?????????????????? MySqlParameter.Direction = ParameterDirection.Output;

?????????????????? MySqlParameter.SourceColumn = identityCol;

?????????????????? MySqlParameter.SourceVersion = DataRowVersion.Current;

??????????????????

?????????????????? MyInsertCommand.Parameters.Add(MySqlParameter);

?

?????????????????? insertString.Append(";SELECT @" + identityCol + " = @@IDENTITY");

????????????? }

?

????????????? MyInsertCommand.CommandText = insertString.ToString();

?

????????????? return MyInsertCommand;

???????? }

?

???????? /// <summary>

???????? /// 返回執行Insert操作的SqlCommand,自動從系統表中取該表的列作為可更新的列

???????? /// </summary>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="identityCol">identity列</param>

???????? /// <param name="trans">事務對象</param>

???????? /// <returns>執行Insert操作的SqlCommand</returns>

???????? public static SqlCommand InsertCommand(SqlTransaction trans, string tablename, string identityCol)

???????? {

????????????? return InsertCommand(trans, tablename, GetColumnCollection(trans, tablename), identityCol);

???????? }

?

???????? /// <summary>

???????? /// 返回執行Insert操作的SqlCommand,自動從系統表中取該表的列作為可更新的列

???????? /// </summary>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="trans">事務對象</param>

???????? /// <returns>執行Insert操作的SqlCommand</returns>

???????? public static SqlCommand InsertCommand(SqlTransaction trans, string tablename)

???????? {

????????????? return InsertCommand(trans, tablename, GetIdentityColumn(trans, tablename));

???????? }

????????? #endregion InsertCommand

?

????????? #region 返回執行Update操作的SqlCommand

?

???????? /// <summary>

???????? /// 返回執行Update操作的SqlCommand

???????? /// </summary>

???????? /// <param name="trans">事務對象</param>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="updateDataColumnCollection">數據列集合</param>

???????? /// <param name="keyColumnCollection">主鍵列集合</param>

???????? /// <param name="identityCol">identity列</param>

???????? /// <returns>執行Update操作的SqlCommand</returns>

???????? public static SqlCommand UpdateCommand(SqlTransaction trans, string tablename,

????????????? UpdateDataColumnCollection updateDataColumnCollection, UpdateDataColumnCollection keyColumnCollection,

????????????? string identityCol)

???????? {

????????????? StringBuilder execSqlString = new StringBuilder(), whereString = new StringBuilder();

????????????? SqlParameter MySqlParameter;

?

????????????? SqlCommand MyUpdateCommand = new SqlCommand();

?

????????????? MyUpdateCommand.Connection = trans.Connection;

????????????? MyUpdateCommand.Transaction = trans;

?

????????????? execSqlString.Append("UPDATE " + tablename + " SET ");

????????????? whereString.Append(" WHERE 1 = 1");

?

????????????? foreach (UpdateDataColumn keyColumn in keyColumnCollection)

????????????? {

?????????????????? whereString.Append(" AND [" + keyColumn + "] = @Original_" + keyColumn);

?

?????????????????? MySqlParameter = new SqlParameter();

?

?????????????????? MySqlParameter.ParameterName = "@Original_" + keyColumn.ColumnName;

?????????????????? MySqlParameter.SqlDbType = keyColumn.SqlDbType;

?????????????????? MySqlParameter.Direction = ParameterDirection.Input;

?????????????????? MySqlParameter.SourceColumn = keyColumn.SourceColumn;

?????????????????? MySqlParameter.SourceVersion = DataRowVersion.Original;

??????????????????????

?????????????????? MyUpdateCommand.Parameters.Add(MySqlParameter);

????????????? }

?

????????????? foreach (UpdateDataColumn updateDataColumn in updateDataColumnCollection)

????????????? {

?????????????????? //對于IDENTITY列無需賦值

?????????????????? if (updateDataColumn.ColumnName != identityCol)

?????????????????? {

??????????????????????? execSqlString.Append("[" + updateDataColumn.ColumnName + "] = @" + updateDataColumn.ColumnName + ", ");

??????????????????????

??????????????????????? MySqlParameter = new SqlParameter();

?

??????????????????????? MySqlParameter.ParameterName = "@" + updateDataColumn.ColumnName;

??????????????????????? MySqlParameter.SqlDbType = updateDataColumn.SqlDbType;

??????????????????????? MySqlParameter.Direction = ParameterDirection.Input;

??????????????????????? MySqlParameter.SourceColumn = updateDataColumn.SourceColumn;

??????????????????????? MySqlParameter.SourceVersion = DataRowVersion.Current;

??????????????????????

??????????????????????? MyUpdateCommand.Parameters.Add(MySqlParameter);

?????????????????? }

?

?????????????????? //Key字段已包括在strWhere中

?????????????????? if (keyColumnCollection.FindByColumnName(updateDataColumn.ColumnName) == null && updateDataColumn.SqlDbType != SqlDbType.Text &&

??????????????????????? updateDataColumn.SqlDbType != SqlDbType.NText && updateDataColumn.SqlDbType != SqlDbType.Image)

?????????????????? {

??????????????????????? whereString.Append(" AND ([" + updateDataColumn.ColumnName + "] = @Original_" + updateDataColumn.ColumnName +

??????????????????????????? " OR (@Original_" + updateDataColumn.ColumnName + " IS NULL AND [" + updateDataColumn.ColumnName + "] IS NULL))");

?

??????????????????????? MySqlParameter = new SqlParameter();

?

??????????????????????? MySqlParameter.ParameterName = "@Original_" + updateDataColumn.ColumnName;

??????????????????????? MySqlParameter.SqlDbType = updateDataColumn.SqlDbType;

??????????????????????? MySqlParameter.Direction = ParameterDirection.Input;

??????????????????????? MySqlParameter.SourceColumn = updateDataColumn.SourceColumn;

??????????????????????? MySqlParameter.SourceVersion = DataRowVersion.Original;

??????????????????????

??????????????????????? MyUpdateCommand.Parameters.Add(MySqlParameter);

?????????????????? }

????????????? }

?

????????????? execSqlString = execSqlString.Remove(execSqlString.Length - 2, 2);

????????????? execSqlString.Append(whereString);

?

????????????? MyUpdateCommand.CommandText = execSqlString.ToString();

?

????????????? return MyUpdateCommand;

???????? }

?

???????? /// <summary>

???????? /// 返回執行Update操作的SqlCommand,自動從系統表中取該表的列作為可更新的列

???????? /// </summary>

???????? /// <param name="trans">事務對象</param>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="keyColumnCollection">主鍵列集合</param>

???????? /// <param name="identityCol">identity列</param>

???????? /// <returns>執行Update操作的SqlCommand</returns>

???????? public static SqlCommand UpdateCommand(SqlTransaction trans, string tablename,

????????????? UpdateDataColumnCollection keyColumnCollection, string identityCol)

???????? {

????????????? return UpdateCommand(trans, tablename, GetColumnCollection(trans, tablename), keyColumnCollection, identityCol);

???????? }

?

???????? /// <summary>

???????? /// 返回執行Update操作的SqlCommand,自動從系統表中取該表的列作為可更新的列

???????? /// </summary>

???????? /// <param name="trans">事務對象</param>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <returns>執行Update操作的SqlCommand</returns>

???????? public static SqlCommand UpdateCommand(SqlTransaction trans, string tablename)

???????? {

????????????? return UpdateCommand(trans, tablename, GetKeyColumnCollection(trans, tablename), GetIdentityColumn(trans, tablename));

???????? }

?

????????? #endregion

?

????????? #region 返回執行Delete操作的SqlCommand

?

???????? /// <summary>

???????? /// 返回執行Delete操作的SqlCommand

???????? /// </summary>

???????? /// <param name="trans">事務對象</param>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="updateDataColumnCollection">數據列集合</param>

???????? /// <param name="keyColumnCollection">主鍵列集合</param>

???????? /// <returns>執行Delete操作的SqlCommand</returns>

???????? public static SqlCommand DeleteCommand(SqlTransaction trans, string tablename,

????????????? UpdateDataColumnCollection updateDataColumnCollection, UpdateDataColumnCollection keyColumnCollection)

???????? {

????????????? StringBuilder execSqlString = new StringBuilder();

????????????? SqlParameter MySqlParameter;

?

????????????? SqlCommand MyDeleteCommand = new SqlCommand();

?

????????????? MyDeleteCommand.Connection = trans.Connection;

????????????? MyDeleteCommand.Transaction = trans;

?

????????????? execSqlString.Append("DELETE FROM " + tablename + " WHERE 1 = 1");

?

????????????? foreach (UpdateDataColumn keyColumn in keyColumnCollection)

????????????? {

?????????????????? execSqlString.Append(" AND [" + keyColumn.ColumnName + "] = @Original_" + keyColumn.ColumnName);

?

?????????????????? MySqlParameter = new SqlParameter();

?

?????????????????? MySqlParameter.ParameterName = "@Original_" + keyColumn.ColumnName;

?????????????????? MySqlParameter.SqlDbType = keyColumn.SqlDbType;

?????????????????? MySqlParameter.Direction = ParameterDirection.Input;

?????????????????? MySqlParameter.SourceColumn = keyColumn.SourceColumn;

?????????????????? MySqlParameter.SourceVersion = DataRowVersion.Original;

??????????????????????

?????????????????? MyDeleteCommand.Parameters.Add(MySqlParameter);

????????????? }

?

????????????? foreach (UpdateDataColumn updateDataColumn in updateDataColumnCollection)

????????????? {

?????????????????? //Key字段已包括在strWhere中

?????????????????? if (keyColumnCollection.FindByColumnName(updateDataColumn.ColumnName) == null && updateDataColumn.SqlDbType != SqlDbType.Text &&

??????????????????????? updateDataColumn.SqlDbType != SqlDbType.NText && updateDataColumn.SqlDbType != SqlDbType.Image)

?????????????????? {

??????????????????????? execSqlString.Append(" AND ([" + updateDataColumn.ColumnName + "] = @Original_" + updateDataColumn.ColumnName +

??????????????????????????? " OR (@Original_" + updateDataColumn.ColumnName + " IS NULL AND [" + updateDataColumn.ColumnName + "] IS NULL))");

?

??????????????????????? MySqlParameter = new SqlParameter();

?

??????????????????????? MySqlParameter.ParameterName = "@Original_" + updateDataColumn.ColumnName;

??????????????????????? MySqlParameter.SqlDbType = updateDataColumn.SqlDbType;

??????????????????????? MySqlParameter.Direction = ParameterDirection.Input;

??????????????????????? MySqlParameter.SourceColumn = updateDataColumn.SourceColumn;

??????????????????????? MySqlParameter.SourceVersion = DataRowVersion.Original;

??????????????????????

??????????????????????? MyDeleteCommand.Parameters.Add(MySqlParameter);

?????????????????? }

????????????? }

?

????????????? MyDeleteCommand.CommandText = execSqlString.ToString();

?

????????????? return MyDeleteCommand;

???????? }

?

????????

???????? /// <summary>

???????? /// 返回執行Delete操作的SqlCommand,自動從系統表中取該表的列作為可更新的列

???????? /// </summary>

???????? /// <param name="trans">事務對象</param>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <param name="keyColumnCollection">主鍵列集合</param>

???????? /// <returns>執行Delete操作的SqlCommand</returns>

???????? public static SqlCommand DeleteCommand(SqlTransaction trans, string tablename,

????????????? UpdateDataColumnCollection keyColumnCollection)

???????? {

????????????? return DeleteCommand(trans, tablename, GetColumnCollection(trans, tablename), keyColumnCollection);

???????? }

?

???????? /// <summary>

???????? /// 返回執行Delete操作的SqlCommand,自動從系統表中取該表的列作為可更新的列

???????? /// </summary>

???????? /// <param name="trans">事務對象</param>

???????? /// <param name="tablename">要更新的表名</param>

???????? /// <returns>執行Delete操作的SqlCommand</returns>

???????? public static SqlCommand DeleteCommand(SqlTransaction trans, string tablename)

???????? {

????????????? return DeleteCommand(trans, tablename, GetKeyColumnCollection(trans, tablename));

???????? }

?

????????? #endregion

?

????????? #region 獲取表的列集合

????????

???????? /// <summary>

???????? /// 獲取表的列集合

???????? /// </summary>

???????? /// <param name="tablename">表名</param>

???????? /// <returns>數據列結構數組</returns>

????????? private static UpdateDataColumnCollection GetColumnCollection(SqlTransaction trans, string tableName)

???????? {

????????????? //取表列的SQL語句

????????????? string SQLSelect = "SELECT a.name, b.name AS type FROM syscolumns a, systypes b WHERE a.xtype = b.xtype and b.name <> 'sysname' " +

?????????????????? "AND a.id = (SELECT id FROM sysobjects WHERE name = @tablename)";

?

????????????? SqlParameter paramTableName = new SqlParameter("@tableName", SqlDbType.NVarChar, 128);

????????????? paramTableName.Value = tableName;

?

????????????? DataSet ds = new DataSet();

????????????? string[] tableNames = {tableName};

?

????????????? SqlHelper.FillDataset(trans, CommandType.Text, SQLSelect, ds, tableNames, paramTableName);

?

????????????? UpdateDataColumnCollection updateDataColumnCollection = new UpdateDataColumnCollection();

?

????????????? foreach (DataRow dr in ds.Tables[tableName].Rows)

????????????? {

?????????????????? updateDataColumnCollection.Add(dr["name"].ToString(), dr["type"].ToString());

????????????? }

?

????????????? return updateDataColumnCollection;

???????? }

?

????????? #endregion

?

????????? #region 由SqlDbType名稱返回SqlDbType枚舉值

?

???????? /// <summary>

???????? /// 由SqlDbType名稱返回SqlDbType枚舉值

???????? /// </summary>

???????? /// <param name="type">類型名稱</param>

???????? /// <returns>對應的SqlDbType枚舉值</returns>

???????? public static SqlDbType GetSqlDbType(string type)

???????? {

????????????? try

????????????? {

?????????????????? return (SqlDbType)Enum.Parse(typeof(SqlDbType), type, true);

????????????? }

????????????? catch

????????????? {

?????????????????? return SqlDbType.NVarChar;

????????????? }

???????? }

????????? #endregion GetSqlDbType

?

????????? #region 更新數據行

?

???????? /// <summary>

???????? /// 更新數據行

???????? /// </summary>

???????? /// <param name="trans"></param>

???????? /// <param name="tableName"></param>

???????? /// <param name="dr"></param>

???????? public static void UpdateDataRow(SqlTransaction trans, string tableName, DataRow dr)

???????? {

????????????? SqlCommand c;

?

????????????? switch (dr.RowState)

????????????? {

?????????????????? case DataRowState.Deleted:

?????????????????????? c = DeleteCommand(trans, tableName);

?????????????????????? break;

?????????????????? case DataRowState.Modified:

?????????????????????? c = UpdateCommand(trans, tableName);

?????????????????????? break;

?????????????????? case DataRowState.Added:

?????????????????????? c = InsertCommand(trans, tableName);

?????????????????????? break;

?????????????????? default:

??????????????????????? return;

????????????? }

?

????????????? foreach (SqlParameter p in c.Parameters)

????????????? {

?????????????????? p.Value = dr[p.SourceColumn, p.SourceVersion];

????????????? }

?

????????????? if (c.ExecuteNonQuery() == 0)

?????????????????? throw new DBConcurrencyException();

?

????????????? dr.AcceptChanges();

???????? }

?

????????? #endregion

?

????????? #region 返回表的Identity列

?

???????? /// <summary>

???????? /// 返回表的Identity列

???????? /// </summary>

???????? /// <param name="trans">事物對象</param>

???????? /// <param name="tableName">表名</param>

???????? /// <returns>Identity列</returns>

???????? public static string GetIdentityColumn(SqlTransaction trans, string tableName)

???????? {

????????????? SqlParameter paramObjName = new SqlParameter("@objName", SqlDbType.NVarChar, 128);

????????????? paramObjName.Value = tableName;

?

????????????? string selectString = "SELECT name FROM syscolumns WHERE id = object_id(@objName) AND colstat & 1 = 1;";

?

????????????? object obj = SqlHelper.ExecuteScalar(trans, CommandType.Text, selectString, paramObjName);

?

????????????? if (obj != null && obj != DBNull.Value)

?????????????????? return obj.ToString();

????????????? else

?????????????????? return "";

???????? }

?

????????? #endregion

?

????????? #region 返回表的主鍵列

?

???????? /// <summary>

???????? /// 返回表的主鍵列

???????? /// </summary>

???????? /// <param name="trans">事物對象</param>

???????? /// <param name="tableName">表名</param>

???????? /// <returns>主鍵列集合</returns>

???????? public static UpdateDataColumnCollection GetKeyColumnCollection(SqlTransaction trans, string tableName)

???????? {

????????????? UpdateDataColumnCollection keyDataColumnCollection = new UpdateDataColumnCollection();

?

????????????? string selectString = "select a.name as TableName, rtrim(b.name) as ColName, c.name as TypeName, " +

?????????????????? "case when h.id is not null then 'PK' else '' end as primarykey from sysobjects a, syscolumns b " +

?????????????????? "left outer join (select g.id,g.colid from sysindexes f,sysindexkeys g where f.id = g.id and " +

?????????????????? "f.indid = g.indid and f.indid > 0 and f.indid < 255 and (f.status & 2048)<>0) h on b.id = h.id " +

?????????????????? "and b.colid = h.colid, systypes c where a.id = b.id and b.xtype = c.xtype and h.id is not null " +

?????????????????? "and a.Name = @tableName order by a.name, rtrim(b.name)";

?

????????????? SqlParameter paramTableName = new SqlParameter("@tableName", SqlDbType.NVarChar, 128);

????????????? paramTableName.Value = tableName;

?

????????????? DataSet ds = new DataSet();

????????????? string[] tableNames = {tableName};

?

????????????? SqlHelper.FillDataset(trans, CommandType.Text, selectString, ds, tableNames, paramTableName);

?

????????????? foreach (DataRow dr in ds.Tables[tableName].Rows)

????????????? {

?????????????????? keyDataColumnCollection.Add(dr["ColName"].ToString(), dr["TypeName"].ToString());

????????????? }

?

????????????? return keyDataColumnCollection;

???????? }

?

????????? #endregion

???? }

?

???? #region UpdateDataColumn集合

?

???? /// <summary>

???? /// UpdateDataColumn集合

???? /// </summary>

???? public class UpdateDataColumnCollection : CollectionBase

???? {

???????? public UpdateDataColumnCollection()

???????? {

???????? }

?

????????? #region 獲取UpdateDataColumn對象

?

???????? /// <summary>

???????? /// 獲取UpdateDataColumn對象

???????? /// </summary>

???????? public UpdateDataColumn this[string columnName]

???????? {

????????????? get

????????????? {

?????????????????? return this.FindByColumnName(columnName);

????????????? }

???????? }

?

???????? /// <summary>

???????? /// 獲取UpdateDataColumn對象

???????? /// </summary>

???????? public UpdateDataColumn this[int index]

???????? {

????????????? get

????????????? {

?????????????????? return (UpdateDataColumn)base.List[index];

????????????? }

???????? }

?

????????? #endregion

?

????????? #region 通過數據列名稱查找數據列

?

???????? /// <summary>

???????? /// 通過數據列名稱查找數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列名稱</param>

???????? /// <returns>數據列</returns>

???????? public UpdateDataColumn FindByColumnName(string columnName)

???????? {

????????????? foreach (object o in base.List)

????????????? {

?????????????????? UpdateDataColumn updateDataColumn = (UpdateDataColumn)o;

?

?????????????????? if (updateDataColumn.ColumnName == columnName)

?????????????????????? return updateDataColumn;

????????????? }

?

????????????? return null;

???????? }

?

????????? #endregion

?

????????? #region 向集合中添加數據列

?

???????? /// <summary>

???????? /// 向集合中添加數據列

???????? /// </summary>

???????? /// <param name="updateDataColumn">數據列對象</param>

???????? public void Add(UpdateDataColumn updateDataColumn)

???????? {

????????????? this.List.Add(updateDataColumn);

???????? }

?

???????? /// <summary>

???????? /// 向集合中添加數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列的名稱</param>

???????? /// <param name="sqlDbType">數據列的類型</param>

???????? public void Add(string columnName, SqlDbType sqlDbType)

???????? {

????????????? UpdateDataColumn updateDataColumn = new UpdateDataColumn(columnName, sqlDbType, columnName);

????????????? this.Add(updateDataColumn);

???????? }

?

???????? /// <summary>

???????? /// 向集合中添加數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列的名稱</param>

???????? /// <param name="sqlDbType">數據列的類型</param>

???????? /// <param name="sourceColumn">源列的名稱</param>

???????? public void Add(string columnName, SqlDbType sqlDbType,string sourceColumn)

???????? {

????????????? UpdateDataColumn updateDataColumn = new UpdateDataColumn(columnName, sqlDbType, sourceColumn);

????????????? this.Add(updateDataColumn);

???????? }

?

???????? /// <summary>

???????? /// 向集合中添加數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列的名稱</param>

???????? /// <param name="sqlDbType">數據列的類型</param>

???????? public void Add(string columnName, string sqlDbType)

???????? {

????????????? UpdateDataColumn updateDataColumn = new UpdateDataColumn(columnName, sqlDbType, columnName);

????????????? this.Add(updateDataColumn);

???????? }

?

???????? /// <summary>

???????? /// 向集合中添加數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列的名稱</param>

???????? /// <param name="sqlDbType">數據列的類型</param>

???????? /// <param name="sourceColumn">源列的名稱</param>

???????? public void Add(string columnName, string sqlDbType, string sourceColumn)

???????? {

????????????? UpdateDataColumn updateDataColumn = new UpdateDataColumn(columnName, sqlDbType, sourceColumn);

????????????? this.Add(updateDataColumn);

???????? }

?

????????? #endregion

?

????????? #region 從集合中移除數據列

?

???????? /// <summary>

???????? /// 從集合中移除數據列

???????? /// </summary>

???????? /// <param name="updateDataColumn"></param>

???????? public void Remove(UpdateDataColumn updateDataColumn)

???????? {

????????????? this.List.Remove(updateDataColumn);

???????? }

?

????????? #endregion

???? }

?

???? #endregion

?

???? #region 數據列

?

???? /// <summary>

???? /// 數據更新時用到的數據列

???? /// </summary>

???? public class UpdateDataColumn

???? {

????????? private string columnName;?? //數據列的名稱

????????? private SqlDbType sqlDbType;//數據列的類型

????????? private string sourceColumn;//源列的名稱

?

???????? /// <summary>

???????? /// 數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列的名稱</param>

???????? /// <param name="sqlDbType">數據列的類型</param>

???????? /// <param name="sourceColumn">源列的名稱</param>

???????? public UpdateDataColumn(string columnName, SqlDbType sqlDbType,string sourceColumn)

???????? {

????????????? this.columnName = columnName;

????????????? this.sqlDbType = sqlDbType;

????????????? this.sourceColumn = sourceColumn;

???????? }

?

???????? /// <summary>

???????? /// 數據列

???????? /// </summary>

???????? /// <param name="columnName">數據列的名稱</param>

???????? /// <param name="sqlDbType">數據列的類型</param>

???????? /// <param name="sourceColumn">源列的名稱</param>

???????? public UpdateDataColumn(string columnName, string sqlDbType,string sourceColumn)

???????? {

????????????? this.columnName = columnName;

????????????? this.sqlDbType = SqlClass.GetSqlDbType(sqlDbType);

????????????? this.sourceColumn = sourceColumn;

???????? }

?

???????? /// <summary>

???????? /// 獲取數據列的名稱

???????? /// </summary>

???????? public string ColumnName

???????? {

????????????? get{return this.columnName;}

???????? }

????????

???????? /// <summary>

???????? /// 獲取數據列的類型

???????? /// </summary>

???????? public SqlDbType SqlDbType

???????? {

????????????? get{return this.sqlDbType;}

???????? }

?

???????? /// <summary>

???????? /// 獲取源列的名稱

???????? /// </summary>

???????? public string SourceColumn

???????? {

????????????? get{return this.sourceColumn;}

???????? }

?

???????? /// <summary>

???????? /// 返回ToString()

???????? /// </summary>

???????? /// <returns></returns>

???????? public override string ToString()

???????? {

????????????? return this.columnName.ToString ();

???????? }

???? }

?

???? #endregion

}

調用示例:


DataSet ds = new DataSet();

?

//填充DataSet

SqlHelper.FillDataset(connectingString, CommandType.Text, "select * from Test", ds, new string[]{"Test"});

?

...

?

//更新DataSet

using (SqlConnection conn = new SqlConnection(connectingString))

{

???? conn.Open();

???? using (SqlTransaction trans = conn.BeginTransaction())

???? {

???????? try

???????? {

????????????? SqlHelper.UpdateDataset(SqlClass.InsertCommand(trans, "Test"), SqlClass.DeleteCommand(trans, "Test"),

?????????????????? SqlClass.UpdateCommand(trans, "Test"), ds, "Test");

?

????????????? trans.Commit();

???????? }

???????? catch

???????? {

????????????? trans.Rollback();

????????????? throw;

???????? }

???? }

}

?


個人感覺使用該類來更新DataTable比較方便,隱約找到了一點使用DataWindow的感覺,但由于時間和精力上的原因,目前該類只適用于SQL Server,暫時不支持其他DBMS
代碼中用到了Microsoft的Data Access Application Block,可以到http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp下載

?

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/langmafeng/archive/2004/07/02/32287.aspx

轉載于:https://www.cnblogs.com/chenbg2001/archive/2010/06/26/1765689.html

總結

以上是生活随笔為你收集整理的.Net中DataTable的保存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。