C#读取MDB数据

       昨天收到一个Order要在.Net中读取Access数据库(MDB文件)的数据,经过问度娘找了篇《C#操作Access之读取mdb浅析》,并已参照实现了具体功能,但发现里面用OleDbCommand和OleDbDataReader 读取、组合出来的Table数据字段都是String型(崩溃中。。。)。所幸Simon建议用OleDbDataAdapter, 用OleDbDataAdapter不仅写法简单,字段的数据类型也不会掉失。

类源码
using System.Data;
using System.Data.OleDb;

        private class MDBHelp
        {
            private string _fileName;
            private string _connectionString;
            private OleDbConnection _odcConnection;


            /// <summary>
            /// 构建函数
            /// </summary>
            /// <param name="fileName">MDB文件(含完整路徑)</param>
            public MDBHelp(string fileName)
            {
                this._fileName = fileName;
                this._connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";";
            }


            /// <summary>
            /// 建立连接(打开数据库文件)
            /// </summary>
            public void Open()
            {
                try
                {
                    // 建立连接
                    this._odcConnection = new OleDbConnection(this._connectionString);


                    // 打开连接
                    this._odcConnection.Open();
                }
                catch (Exception)
                {
                    throw new Exception("嘗試打开 " + this._fileName + " 失敗, 請確認文件是否存在!");
                }
            }


            /// <summary>
            /// 断开连接(关闭据库文件)
            /// </summary>
            public void Close()
            {
                this._odcConnection.Close();
            }


            /// <summary>
            /// 根据sql命令返回一个DataSet
            /// </summary>
            /// <param name="sql">sql命令</param>
            /// <returns>以DataTable形式返回数据</returns>
            public DataSet GetDataSet(string sql)
            {
                DataSet ds = new DataSet();


                try
                {
                    OleDbDataAdapter adapter = new OleDbDataAdapter(sql, this._odcConnection);
                    adapter.Fill(ds);
                }
                catch (Exception)
                {
                    throw new Exception("sql語句: " + sql + " 執行失敗!");
                }


                return ds;
            }
        }        

调用方法:
            string mdbFile = "p:\\EvenYYMM.mdb";           //默認路徑

            MDBHelp mdbHelp = new MDBHelp(mdbFile);
            try
            {
                mdbHelp.Open();     // 打開數據庫

                var ds1 = mdbHelp.GetDataSet("select count(*) as n1 from even where id > " + last_id.ToString());

                var ds = mdbHelp.GetDataSet("select to 10 * from even where Id >= 100 order by id");

                mdbHelp.Close();    // 關閉數據庫
            }
            finally
            {
                mdbHelp = null;
            }



c# 读取.mdb中的栅格数据 string path = @"E:\zxl\npgDB.mdb"; axMapControl1.ActiveView.Clear(); axMapControl1.ActiveView.Refresh(); pFWorkspace = OpenAccessWorkspace(path, pFWorkspace); IFeatureLayer iflayer; iflayer = new FeatureLayerClass(); iflayer.FeatureClass = pFWorkspace.OpenFeatureClass("地标"); axMapControl1.AddLayer(iflayer, 0); IFeatureLayer featureLayer = iflayer; //this.axMapControl1.Map.get_Layer(0) as IFeatureLayer; IFeatureCursor featureCursor; IFeature feature; IGeometry geometry; IActiveView activeView = this.axMapControl1.ActiveView; ITopologicalOperator topo; featureCursor = featureLayer.FeatureClass.Search(null, false); feature = featureCursor.NextFeature(); ISpatialFilter spatialFilter = new SpatialFilterClass(); IFeatureSelection featureSelection; if (feature != null) { MessageBox.Show("if","tishi"); topo = feature.Shape as ITopologicalOperator; //double bufferLength = ConvertPixelsToMapUnits(activeView, 2); //geometry = topo.Buffer(bufferLength); geometry = topo.Buffer(1000); spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; spatialFilter.Geometry = geometry; spatialFilter.GeometryField = featureLayer.FeatureClass.ShapeFieldName; spatialFilter.SubFields = "name"; spatialFilter.WhereClause = "name='第一教学楼'"; featureSelection = featureLayer as IFeatureSelection; featureSelection.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false); ISelectionSet selectionSet = featureSelection.SelectionSet; ICursor cursor; selectionSet.Search(null, true, out cursor); featureCursor = cursor as IFeatureCursor; feature = featureCursor.NextFeature(); while (feature != null) { MessageBox.Show("while", "tishi"); this.axMapControl1.Map.SelectFeature(featureLayer, feature); feature = featureCursor.NextFeature(); } // activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, geometry.Envelope); } } private void button13_Click(object sender, EventArgs e) { string path = @"E:\zxl\npgDB.mdb"; axMapControl1.ActiveView.Clear(); axMapControl1.ActiveView.Refresh(); pFWorkspace = OpenAccessWorkspace(path, pFWorkspace); IFeatureLayer iflayer; iflayer = new FeatureLayerClass(); iflayer.FeatureClass = pFWorkspace.OpenFeatureClass("地标"); axMapControl1.AddLayer(iflayer, 0); Filter filter = new Filter(); ISpatialFilter filter1=new SpatialFilterClass(); filter1.WhereClause=""; //filter1. = "CITY_NAME = &apos;Phoenix&apos;"; //Envelope envelope = new Envelope(-119, 32, -113, 35); //filter1.Geometry = envelope; //DisplayBuffer displaybuffer = new DisplayBuffer(); //displaybuffer.Distance = 200; //displaybuffer.Units = BufferUnits.Miles; //SimpleRenderer bufferrenderer = new SimpleRenderer(); //SimpleFillSymbol sfs = new SimpleFillSymbol(); //sfs.Color = System.Drawing.Color.Yellow; //sfs.Transparency = 50.0; //bufferrenderer.Symbol = sfs; //FeatureLayer bufferlayer = iflayer.CreateBufferLayer(filter, displaybuffer, bufferrenderer, "mybuffer"); //mapview.Layers.Add(bufferlayer); //mapview.Draw(); Geoprocessor gp=new Geoprocessor();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值