![](/img/trans.png)
[英]Reading content from MS Access db using ADO.net and trying to insert the values into a SQL Server table
[英]reading Ms Access using Ado.net
我正在用C#阅读数据库(Ms Access)。 我正在使用Ado.net进行连接。 该数据库有很多表(大约100个),每个表都有大约50列和500行。 每个字段都包含不同的数据类型(整数,字符串,布尔值)。 我需要做的是将选定的表和字段转换为二进制格式。
经过一些文献调查之后,我计划使用“ DataReader”读取数据,因为我只需要读取二进制转换的变量即可。
我的问题是
在C#编程方面,我的数据结构应该是什么? 说如果我为所有表创建单独的类并定义成员变量和方法,那么如何使它更有效? 因为我已经提到有100个表和50个字段,所以实际上我不需要选择所有字段(我只需要选择所需的字段)。 我不想像这样硬编码(例如)
SELECT BusinessEntityID, LoginID, NationalIDNumber from table1Name
因为我必须遍历代码中提到的所选表和所选字段。 由于我对SQL有点陌生,请您提供一些提示吗? 换句话说,如果我问这个问题,如何使用表和字段变量使选择查询有效(如果此问题有任何错误,请更正我)
更新资料
如您所描述的那样,由于拥有大量字段(100 x 50 = 5000),因此首先使用OleDb
读取SchemaTable
可能会很有用:
清单1. Get SchemaTable(可选)
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.从MS Access数据库表读取数据
下面显示了从MS Access数据库表读取数据并使用DataAdapter
OleDb
对象在DataSet
填充DataTable
的实际过程(该过程原本封装在我的自定义DB操作类中,如语法所示,因此可以根据需要进行修改) :
#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/zh-cn/library/system.data.oledb.oledbconnection.getoledbschematable.aspx
注意 :第一步(清单1)是可选的。 这两个过程均基于OleDb
对象,以在MS Access DB上进行操作。 对于其他数据库类型(例如MS SQL Server),有不同的对象集(例如SQLConnection
等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.