2013-05-09 82 views
0

我读C#中的数据库(MS接入)。我正在使用Ado.net进行连接。这个数据库有很多表(大约100个),每个表都有大约50列和500行。每个字段都包含不同的数据类型(整数,字符串,布尔值)。我必须做的是我必须将选定的表和字段转换为二进制格式。阅读女士访问使用Ado.net

后一些文献调查我已经计划使用“DataReader的”,因为我需要阅读的变量只为二进制转换读取数据。

我的问题是

在C#编程方面应该是什么我的数据结构?说,如果我的所有表创建单独的类并定义成员变量和方法,我怎样才能使它更有效?因为我刚才提到有100个表格和50场,其实我并不需要选择所有字段(我只选择所需的)。我不想硬编码等(例如)

SELECT BusinessEntityID, LoginID, NationalIDNumber from table1Name 

因为我有过选择表,这是在我的代码某处提到所选字段进行迭代。由于我对SQL有点新,你能否提供一些提示?以另一种方式,如果我问的问题如何使选择查询高效地为表和字段变量(请纠正我,如果有什么不对的问题)下面 SQL Server SELECT INTO @variable?

提到

更新

像这样的东西

+2

“我要读每一个领域,所有写入二进制字段”。 - 说什么?也许你应该说明你正在试图解决,而不是感知解决方案... – 2013-05-09 00:50:17

+0

@MitchWheat实际问题,实际要求是,我有到MS Access数据库的内容转换为二进制文件。 – RobinAtTech 2013-05-09 00:52:32

+0

这是一个解决方案。是什么背后需要一个可查询的数据库转换成二进制BLOB的原因是什么? – 2013-05-09 00:57:14

回答

1

具有如你描述字段的巨大总量(100×50 = 5000),则可能首先使用OleDb读取SchemaTable有用:

清单1.获取SchemaTabl e(可选)从MS Access数据库表

实际过程从MS Access数据库表中读取数据,并在使用DataAdapterOleDb对象DataSet填充DataTable

static DataTable GetSchemaTable(string connectionString) 
{ 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     connection.Open(); 
     DataTable schemaTable = 
      connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
      new object[] { null, null, null, "TABLE" }); 
     return schemaTable; 
    } 
} 

清单2.读数据被示出(它最初被封装在我的自定义数据库操作类中,如语法所示,因此您可以根据需要对其进行修改):

#region DataSet, DataAdapter, DataTable 
internal DataSet dataSet; 
internal OleDbDataAdapter dataAdapter; 
internal DataTable dataTable; 
private OleDbConnection connection; 
#endregion 

internal GetData(string SelectQuery, string ConnectionString) 
{ 
    try 
    { 
     #region Create Data Objects: Connection, DataAdapter, DataSet, DataTable 
     // use OleDb Connection to MS Access DB 
     connection = new OleDbConnection(ConnectionString); 
     connection.Open(); 

     // create new DataAdapter on OleDb Connection and Select Query text 
     dataAdapter = new OleDbDataAdapter(); 
     dataAdapter.SelectCommand = new OleDbCommand(SelectQuery, connection); 

     // create DataSet 
     dataSet = new DataSet(); 

     // retrieve TableSchema 
     // DataTable[] _dataTablesSchema = _dataAdapter.FillSchema(_dataSet, SchemaType.Source, "{TABLE NAME}"); 
     DataTable[] _dataTablesSchema = dataAdapter.FillSchema(dataSet, SchemaType.Source); 

     // there is only one Table in DataSet, so use 0-index 
     dataTable = _dataTablesSchema[0]; 

     // use DataAdapter to Fill Dataset 
     dataAdapter.Fill(dataTable); 

     // OPTIONAL: use OleDbCommandBuilder to build a complete set of CRUD commands 
     OleDbCommandBuilder builder = new OleDbCommandBuilder(dataAdapter); 
     // Update, Insert and Delete Commands 
     dataAdapter.UpdateCommand = builder.GetUpdateCommand(); 
     dataAdapter.InsertCommand = builder.GetInsertCommand(); 
     dataAdapter.DeleteCommand = builder.GetDeleteCommand(); 
     #endregion 

     connection.Close(); 
    } 
    catch {throw; } 
} 

参阅MSDN上的职位详细信息:链接http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx

:第一步(清单1)是可选的。这两个程序是基于OleDb对象对MS Access数据库进行操作。对于其他DB类型(例如MS SQL服务器)有不同的一组对象,(像SQLConnection等)