2013-05-09 79 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等)