天天看點

.NET Compact Framework下SQL CE的使用

在.NET Compact Framework下進行SQL CE使用和開發,需要應用庫System.Data.SqlServerCe.dll,需要注意的是不同的SQL CE版本使用不用的DLL版本. SQL CE 3.5的庫一般對應以下的目錄 C:\Program Files\Microsoft SQL Server Compact Edition\v3.5 ADO.net DLL,而SQL CE 3.0的庫一般對應以下的目錄 C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile,彼此不相相容。由于開發的命名空間(namespace)是一緻的,是以開發的程式可以用在不用的SQL CE版本。

下面示範的是一個SQL CE的helper類,這個類隻是針對SQL CE資料庫,沒有考慮移植到其他資料庫,是以所有的類都使用SQL CE相關的類。

.NET Compact Framework下SQL CE的使用

    class SqlCeHelper : IDisposable

    {

        private SqlCeConnection connection;

        private SqlCeCommand command;

        private const string connectionString = "Data Source=/DB/db.sdf";

        #region Open/Close

        public void Open()

        {

            try

            {

                connection = new SqlCeConnection(connectionString);

                command = connection.CreateCommand();

                command.Connection = connection;

                command.CommandType = CommandType.Text;

                connection.Open();

            }

            catch (DataException e)

                Console.WriteLine(e.Message);

        }

        public void Close()

            connection.Close();

            connection.Dispose();

        public void Dispose()

            command.Dispose();

        #endregion

        #region Operatons

        public SqlCeDataReader ExecuteReader(string sql)

            command.CommandText = sql;

            SqlCeDataReader reader = null;

                reader = command.ExecuteReader();

            return reader;

        public DataSet ExecuteDataSet(string sql)

            SqlCeDataAdapter adapter = new SqlCeDataAdapter(command);

            DataSet ds = new DataSet(); ;

                adapter.Fill(ds);

            return ds;

        public int ExecuteNonQuery(string sql)

            int result = -1;

                result = command.ExecuteNonQuery();

            return result;

        public object ExecuteScalar(string sql)

            object o = null;

                o = command.ExecuteScalar();

            return o;

        #region Transaction

        public void BeginTransaction()

            command.Transaction = connection.BeginTransaction();

        public void CommitTransaction()

            command.Transaction.Commit();

        public void RollbackTransaction()

            command.Transaction.Rollback();

    }

.NET Compact Framework下SQL CE的使用

1.建立SQL CE的連接配接(SqlCeConnection)隻需要指定資料庫檔案路徑,在這個類,我hardcode了檔案路徑,在實際應用中,可以在構造函數進行初始化,或者在Open函數中傳遞連接配接串參數。

2.由于SQL CE目前版本不支援存儲過程,是以SqlCeCommand的CommandType指定為CommandType.Text,隻支援執行SQL語句。

3.實作了通用操作方法ExecuteReader,ExecuteDataSet,ExecuteNonQuery和ExecuteScalar。

4.SQL CE支援事務(Transaction)。

.NET Compact Framework下SQL CE的使用

上圖為使用例子的表結構。

.NET Compact Framework下SQL CE的使用

            SqlCeHelper sqlCe = new SqlCeHelper();

            sqlCe.Open();

            sqlCe.BeginTransaction();

            if (sqlCe.ExecuteNonQuery("delete from t") < 0)

                sqlCe.RollbackTransaction();

                return;

            if (sqlCe.ExecuteNonQuery("insert into t (f1, f2) values (1, 'abc')") < 0)

            SqlCeDataReader reader = sqlCe.ExecuteReader("select * from t where f1 = 1");

            while (reader.Read())

                Console.WriteLine("reader: f2:{0}\n", reader["f2"]);

            if (!reader.IsClosed)

                reader.Close();

            if (sqlCe.ExecuteNonQuery("update t set f2 = 'xyz'") < 0)

            DataSet ds = sqlCe.ExecuteDataSet("select * from t");

            foreach (DataRow dr in ds.Tables[0].Rows)

                Console.WriteLine("dataset: f2:{0}\n", dr["f2"]);

            sqlCe.CommitTransaction();

            sqlCe.Close();

.NET Compact Framework下SQL CE的使用

使用這個Helper類很簡單,先生成這個類的執行個體,打開資料庫連接配接,使用ExecuteReader和ExecuteDataSet進行查詢操作,使用ExecuteNonQuery進行增删改的操作。在操作過程中,同時可以加入事務處理操作,使用完畢關閉資料庫連接配接。

參考文獻

<a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.aspx">System.Data.SqlServerCe Namespace</a>

    本文轉自Jake Lin部落格園部落格,原文連結:http://www.cnblogs.com/procoder/archive/2009/04/08/1431361.html,如需轉載請自行聯系原作者