c#里面如何自己构造一个DataTable对象

c#里面如何自己构造一个DataTable对象,第1张

数据肯定不会自己写进去啊,肯定要程序控制的。首先如果不是从数据库或外部文件等读取数据,一般需要对表单的架构进行初始化,把列的名称和类型添加进去。例如:

SystemDataDataTable dt = new SystemDataDataTable();

dtColumnsAdd("ColumnName1", typeof(String));

dtColumnsAdd("ColumnName2", typeof(Int32));

然后再添加行。

dtRowsAdd(new Object[] { });

using System;

using SystemCollectionsGeneric;

using SystemText;

using SystemConfiguration;

using SystemData;

using SystemDataOleDb;

namespace Excel

{

/// <summary>

/// Excel数据交换类

/// </summary>

public class Excel : IDisposable

{

#region 自定义类型

/// <summary>

/// 是否将第一行作为表头

/// </summary>

public enum HDR

{

/// <summary>

/// 将第一行作为表头

/// </summary>

Yes,

/// <summary>

/// 不用第一行作为表头

/// </summary>

No

};

/// <summary>

/// Excel文件格式

/// </summary>

public enum ExcelFileFormat

{

/// <summary>

/// Excel97/2003格式

/// </summary>

Excel97OR2003,

/// <summary>

/// Excel2007格式

/// </summary>

Excel2007

};

#endregion

#region 变量

private HDR _excelHDR = HDRNo;

private ExcelFileFormat _excelformat = ExcelFileFormatExcel97OR2003;

private string _connectionString2003 = "Provider=MicrosoftJetOLEDB40;Extended Properties=\"Excel 80;HDR={1};IMEX=1\";data source=\"{0}\"";

private string _connectionString2007 = "Provider=MicrosoftACEOLEDB120;Data Source=\"{0}\";Extended Properties=\"Excel 120;HDR={1};IMEX=1\";";

private string _connectionString = "";

private string _filename;

private OleDbConnection _connection;

private OleDbTransaction _tran;

#endregion

#region 属性

#region ConnectionString

/// <summary>

/// 获取系统的连接字符串

/// </summary>

public string ConnectionString

{

get

{

return this_connectionString;

}

}

#endregion

#region 是否将第一行作为表头

/// <summary>

/// 获取或设置是否将第一行作为表头

/// </summary>

public HDR ExcelHDR

{

get

{

return this_excelHDR;

}

set

{

this_excelHDR = value;

}

}

#endregion

#region Excel文件格式

/// <summary>

/// 获取或设置当前Excel文件的格式

/// </summary>

public ExcelFileFormat ExcelFormat

{

get

{

return this_excelformat;

}

set

{

this_excelformat = value;

}

}

#endregion

#endregion

#region 构造函数

/// <summary>

/// 创建一个Excel文件链接对象

/// </summary>

/// <param name="filename">Excel文件完整路径</param>

/// <param name="excelFormat">Excel文件格式</param>

public Excel(string filename, ExcelFileFormat excelFormat)

{

this_filename = filename;

if (excelFormat == ExcelFileFormatExcel97OR2003)

{

this_connectionString = stringFormat(this_connectionString2003, filename, this_excelHDR);

this_connection = new OleDbConnection(this_connectionString);

}

else if (excelFormat == ExcelFileFormatExcel2007)

{

this_connectionString = stringFormat(this_connectionString2007, filename, this_excelHDR);

this_connection = new OleDbConnection(this_connectionString);

}

}

/// <summary>

/// 创建一个Excel文件链接对象

/// </summary>

/// <param name="filename">Excel文件完整路径</param>

/// <param name="excelFormat">Excel文件格式</param>

/// <param name="hdr">是否将第一行作为表头</param>

public Excel(string filename, ExcelFileFormat excelFormat, HDR hdr)

{

this_filename = filename;

this_excelHDR = hdr;

if (excelFormat == ExcelFileFormatExcel97OR2003)

{

this_connectionString = stringFormat(this_connectionString2003, filename, this_excelHDR);

this_connection = new OleDbConnection(this_connectionString);

}

else if (excelFormat == ExcelFileFormatExcel2007)

{

this_connectionString = stringFormat(this_connectionString2007, filename, this_excelHDR);

this_connection = new OleDbConnection(this_connectionString);

}

}

~Excel()

{

thisDispose();

}

#endregion

#region 方法

#region 事务

#region 开始一个Excel文件事务

/// <summary>

/// 开始一个Excel文件事务

/// </summary>

public void BeginTransaction()

{

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

this_tran = this_connectionBeginTransaction();

}

#endregion

#region 提交一个Excel文件事务

/// <summary>

/// 提交一个Excel文件事务

/// </summary>

public void CommitTransaction()

{

if (this_tran != null)

{

this_tranCommit();

}

thisDispose();

}

#endregion

#region 回滚一个Excel文件事务

/// <summary>

/// 回滚一个Excel文件事务

/// </summary>

public void RollbackTransaction()

{

if (this_tran != null)

{

this_tranRollback();

}

thisDispose();

}

#endregion

#region 关联一个事务

/// <summary>

/// 关联一个事务

/// </summary>

/// <param name="tran">事务对象</param>

/// <param name="comm">命令对象</param>

private void AddTransactionToCommand(OleDbTransaction tran, OleDbCommand comm)

{

if (tran != null)

{

commTransaction = tran;

}

}

#endregion

#endregion

#region 查询分析

#region DataSet

#region DataSet QueryDataSet(string sql)

/// <summary>

/// 通过一个Excel-SQL语句查询

/// </summary>

/// <param name="sql">sql</param>

/// <returns>DataSet结果集</returns>

public DataSet QueryDataSet(string sql)

{

OleDbCommand sc = new OleDbCommand(sql, this_connection);

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

thisAddTransactionToCommand(this_tran, sc);

OleDbDataAdapter sda = new OleDbDataAdapter(sc);

DataSet ds = new DataSet();

try

{

sdaFill(ds);

sdaDispose();

scDispose();

}

catch (Exception e)

{

thisLogException(e);

}

return ds;

}

#endregion

#region DataSet QueryDataSet(string ProcedureName,string[] Parameters,object[] Values)

/// <summary>

/// 通过存储过程与参数进行查询

/// </summary>

/// <param name="ProcedureName">存储过程名</param>

/// <param name="Paramters">参数数组</param>

/// <param name="Values">值数组</param>

/// <returns>DataSet数据集</returns>

public DataSet QueryDataSet(string ProcedureName, string[] Parameters, object[] Values)

{

OleDbCommand sc = new OleDbCommand();

scConnection = this_connection;

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

thisAddTransactionToCommand(this_tran, sc);

scCommandText = ProcedureName;

scCommandType = CommandTypeStoredProcedure;

for (int i = 0; i < ParametersLength; i++)

{

scParametersAdd(new OleDbParameter(Parameters[i], Values[i]));

}

OleDbDataAdapter sda = new OleDbDataAdapter(sc);

DataSet ds = new DataSet();

try

{

sdaFill(ds);

sdaDispose();

scDispose();

}

catch (Exception e)

{

thisLogException(e);

}

return ds;

}

#endregion

#endregion

#region DataTable

#region DataTable QueryDataTable(string sql)

/// <summary>

/// 通过一个Excel-SQL语句查询

/// </summary>

/// <param name="sql">sql</param>

/// <returns>DataTable结果集</returns>

public DataTable QueryDataTable(string sql)

{

OleDbCommand sc = new OleDbCommand(sql, this_connection);

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

thisAddTransactionToCommand(this_tran, sc);

OleDbDataAdapter sda = new OleDbDataAdapter(sc);

DataTable dt = new DataTable();

try

{

sdaFill(dt);

sdaDispose();

scDispose();

}

catch (Exception e)

{

thisLogException(e);

}

return dt;

}

#endregion

#region DataTable QueryDataTable(string ProcedureName,string[] Parameters,object[] Values)

/// <summary>

/// 通过存储过程与参数进行查询

/// </summary>

/// <param name="ProcedureName">存储过程名</param>

/// <param name="Paramters">参数数组</param>

/// <param name="Values">值数组</param>

/// <returns>DataTable数据集</returns>

public DataTable QueryDataTable(string ProcedureName, string[] Parameters, object[] Values)

{

OleDbCommand sc = new OleDbCommand();

scConnection = this_connection;

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

thisAddTransactionToCommand(this_tran, sc);

scCommandText = ProcedureName;

scCommandType = CommandTypeStoredProcedure;

for (int i = 0; i < ParametersLength; i++)

{

scParametersAdd(new OleDbParameter(Parameters[i], Values[i]));

}

OleDbDataAdapter sda = new OleDbDataAdapter(sc);

DataTable dt = new DataTable();

try

{

sdaFill(dt);

sdaDispose();

scDispose();

}

catch (Exception e)

{

thisLogException(e);

}

return dt;

}

#endregion

#endregion

#region void

#region void Query(string sql)

/// <summary>

/// 通过一个Excel-SQL语句查询

/// </summary>

/// <param name="sql">sql</param>

public void Query(string sql)

{

OleDbCommand sc = new OleDbCommand(sql, this_connection);

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

thisAddTransactionToCommand(this_tran, sc);

try

{

scExecuteNonQuery();

scDispose();

}

catch (Exception e)

{

thisLogException(e);

}

}

#endregion

#region void Query(string ProcedureName,string[] Parameters,object[] Values)

/// <summary>

/// 通过存储过程与参数进行查询

/// </summary>

/// <param name="ProcedureName">存储过程名</param>

/// <param name="Paramters">参数数组</param>

/// <param name="Values">值数组</param>

/// <returns>DataSet数据集</returns>

public void Query(string ProcedureName, string[] Parameters, object[] Values)

{

OleDbCommand sc = new OleDbCommand();

scConnection = this_connection;

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

thisAddTransactionToCommand(this_tran, sc);

scCommandText = ProcedureName;

scCommandType = CommandTypeStoredProcedure;

for (int i = 0; i < ParametersLength; i++)

{

scParametersAdd(new OleDbParameter(Parameters[i], Values[i]));

}

try

{

scExecuteNonQuery();

scDispose();

}

catch (Exception e)

{

thisLogException(e);

}

}

#endregion

#endregion

#endregion

#region 附加功能

#region 获取所有表名称

/// <summary>

/// 获取所有表名称

/// </summary>

/// <returns>string[] 表名称</returns>

public string[] GetShemaTableName()

{

//获取数据表

if (this_connectionState != ConnectionStateOpen && this_connectionState != ConnectionStateConnecting)

{

this_connectionOpen();

}

try

{

DataTable shemaTable = this_connectionGetOleDbSchemaTable(OleDbSchemaGuidTables, new object[] { null, null, null, "TABLE" });

int n = shemaTableRowsCount;

string[] strTable = new string[n];

int m = shemaTableColumnsIndexOf("TABLE_NAME");

for (int i = 0; i < n; i++)

{

DataRow m_DataRow = shemaTableRows[i];

strTable[i] = m_DataRowItemArrayGetValue(m)ToString();

}

return strTable;

}

catch (Exception e)

{

thisLogException(e);

return null;

}

}

#endregion

#endregion

#region Excel文件 *** 作异常日志

/// <summary>

/// Excel文件错误日志记录

/// </summary>

/// <param name="e">异常信息对象</param>

private void LogException(Exception e)

{

throw new Exception(eMessage);

}

#endregion

#endregion

#region IDisposable 成员

public void Dispose()

{

#region 注销Excel文件事务

if (this_tran != null)

{

this_tranDispose();

}

#endregion

if (this_connection != null)

{

#region 关闭Excel文件连接

if (this_connectionState != ConnectionStateClosed)

{

this_connectionClose();

this_connectionDispose();

}

}

#endregion

}

#endregion

}

}

var dt = new DataTable();

DataRow drr = dtNewRow();

dtRowsInsertAt(drr, h);

这里的h 就是要插入的第几行。

DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。其他使用DataTable的对象包括DataSet和DataView。

DataTable 表示一个内存内关系数据的表,可以独立创建和使用,也可以由其他 NET Framework 对象使用,最常见的情况是作为 DataSet 的成员使用。

可以使用相应的 DataTable 构造函数创建 DataTable 对象。 可以通过使用 Add 方法将其添加到 DataTable 对象的Tables 集合中,将其添加到 DataSet 中。

也可以通过以下方法创建 DataTable 对象:使用 DataAdapter 对象的 Fill 方法或 FillSchema 方法在 DataSet 中创建,或者使用 DataSet 的 ReadXml、ReadXmlSchema 或InferXmlSchema 方法从预定义的或推断的 XML 架构中创建。 请注意,将一个 DataTable 作为成员添加到一个 DataSet 的 Tables 集合中后,不能再将其添加到任何其他 DataSet 的表集合中。

初次创建 DataTable 时,是没有架构(即结构)的。 要定义表的架构,必须创建 DataColumn 对象并将其添加到表的Columns 集合中。 您也可以为表定义主键列,并且可以创建Constraint 对象并将其添加到表的 Constraints 集合中。 在为DataTable 定义了架构之后,可通过将 DataRow 对象添加到表的 Rows 集合中来将数据行添加到表中。

创建 DataTable 时,不需要为 TableName 属性提供值,您可以在其他时间指定该属性,或者将其保留为空。 但是,在将一个没有 TableName 值的表添加到 DataSet 中时,该表会得到一个从“Table”(表示 Table0)开始递增的默认名称 Tablen。

数据库结构是指在计算机的存储设备上合理存放的相关联的有结构的数据集合的结构。一个数据库结构含有各种成分,包括数据库、数据表、字段等。

数据库(Database)

Visual Basic中使用的数据库是关系型数据库(Relational Database)。一个数据库由一个或一组数据表组成。每个数据库都以文件的形式存放在磁盘上,即对应于一个物理文件。不同的数据库,与物理文件对应的方式也不一样。对于dBASE,FoxPro和Paradox格式的数据库来说,一个数据表就是一个单独的数据库文件,而对于Microsoft Access、Btrieve格式的数据库来说,一个数据库文件可以含有多个数据表。

1、数据表(Table)

简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。

表实际上是一个二维表格,例如,一个班所有学生的考试成绩,可以存放在一个表中,表中的每一行对应一个学生,这一行包括学生的学号,姓名及各门课程成绩。

2、记录(Record)

表中的每一行称为一个记录,它由若干个字段组成。

3、字段(Field)

也称域。表中的每一列称为一个字段。每个字段都有相应的描述信息,如数据类型、数据宽度等。

扩展资料:

数据库结构的其他组成结构:

1、索引(Index)

为了提高访问数据库的效率,可以对数据库使用索引。当数据库较大时,为了查找指定的记录,则使用索引和不使用索引的效率有很大差别。

索引实际上是一种特殊类型的表,其中含有关键字段的值(由用户定义)和指向实际记录位置的指针,这些值和指针按照特定的顺序(也由用户定义)存储,从而可以以较快的速度查找到所需要的数据记录。

2、查询(Query)

一条SQL(结构化查询语言)命令,用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的 *** 作。当从数据库中读取数据时,往往希望读出的数据符合某些条件,并且能按某个字段排序。使用SQL,可以使这一 *** 作容易实现而且更加有效。

SQL是非过程化语言(有人称为第四代语言),在用它查找指定的记录时,只需指出做什么,不必说明如何做。每个语句可以看作是一个查询(query),根据这个查询,可以得到需要的查询结果。

3、过滤器(Filter)

过滤器是数据库的一个组成部分,它把索引和排序结合起来,用来设置条件,然后根据给定的条件输出所需要的数据。

4、视图(view)

数据的视图指的是查找到(或者处理)的记录数和显示(或者进行处理)这些记录的顺序。在一般情况下,视图由过滤器和索引控制。

参考资料来源:百度百科-数据库结构

通过合并和获得改变两个方法获得差异的部分:

dataTable1AcceptChanges();

dataTable1Merge(dataTable2);

DataTable changesTable = dataTable1GetChanges();

这样可以快速获得dataTable2中存在而dataTable1中不存在的行,

反之可以用dataTable2合并dataTable1。

首先从数据库中取得数据填充到一个datatable然后定义一个newdatarow,结构是这个datatable然后填充数据到这个newrow里面,然后把这个newrow 插入到你获取结构的datatable的第一行上面(也就是它就是第一行了。)原理是这样。代码你自己写吧。快下班了。没时间。

以上就是关于c#里面如何自己构造一个DataTable对象全部的内容,包括:c#里面如何自己构造一个DataTable对象、怎么用C#语言实现读取EXCEL的表格结构,在把表格中的数据导入到数据库中、请教DataTable 中 Getchanges的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9477301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存