回答
看看我最喜歡的SQLite ADO.NET Wrapper,我個人在很多項目中使用。我猜想,Google Gears正在使用默認的SQLite數據庫,並在代碼中進行了一些修改,以防止ATTACH和#PRAGMA的使用。但數據格式應該是相同的,所以你應該能夠使用這個包裝來訪問它。
最好的問候, 馬丁
//嗨,試試這個:
//Courtesy of http://www.codoxide.com/post/My-Favorite-Database-Wrapper-for-C.aspx
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
namespace GenApp.Core.Providers.nsDb
{
//comm --/<summary>
//comm --/Abstract base class for encapsulating provider independant database interactin logic.
//comm --/</summary>
//comm --/<typeparam name="CONNECTION_TYPE"><see cref="DbConnection"/> derived Connection type.</typeparam>
//comm --/<typeparam name="COMMAND_TYPE"><see cref="DbCommand"/> derived Command type.</typeparam>
//comm --/<typeparam name="ADAPTER_TYPE"><see cref="DbDataAdapater"/> derived Data Adapter type.</typeparam>
public abstract
class AbstractDatabase<CONNECTION_TYPE, COMMAND_TYPE, ADAPTER_TYPE> : IDisposable
where CONNECTION_TYPE : DbConnection, new()
where COMMAND_TYPE : DbCommand
where ADAPTER_TYPE : DbDataAdapter, new()
{
#region : Connection :
//comm --/<summary>Gets the Connection object associated with the current instance.</summary>
public DbConnection Connection
{
get
{
if (internal_currentConnection == null)
{
internal_currentConnection = new CONNECTION_TYPE();
// - Enable to measure the connection timeGenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf (ref userObj , "GetConnectionString START");
internal_currentConnection.ConnectionString = GetConnectionString();
// - Enable to measure the connection timeGenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf (ref userObj , "GetConnectionString END");
}
return internal_currentConnection;
}
}
private DbConnection internal_currentConnection;
//comm --/<summary>When overridden in derived classes returns the connection string for the database.</summary>
//comm --/<returns>The connection string for the database.</returns>
protected abstract string GetConnectionString();
#endregion
#region : Commands :
//comm --/<summary>Gets a DbCommand object with the specified <see cref="DbCommand.CommandText"/>.</summary>
//comm --/<param name="sqlString">The SQL string.</param>
//comm --/<returns>A DbCommand object with the specified <see cref="DbCommand.CommandText"/>.</returns>
public DbCommand GetSqlStringCommand(string sqlString)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
DbCommand cmd = this.Connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlString;
return cmd;
}
//comm --/<summary>Gets a DbCommand object with the specified <see cref="DbCommand.CommandText"/>.</summary>
//comm --/<param name="sqlStringFormat">The SQL string format.</param>
//comm --/<param name="args">The format arguments.</param>
//comm --/<returns>A DbCommand object with the specified <see cref="DbCommand.CommandText"/>.</returns>
public DbCommand GetSqlStringCommand(string sqlStringFormat, params object[] args)
{
return GetSqlStringCommand(string.Format(sqlStringFormat, args));
}
//comm --/<summary>Gets a DbCommand object for the specified Stored Procedure.</summary>
//comm --/<param name="storedProcName">The name of the stored procedure.</param>
//comm --/<returns>A DbCommand object for the specified Stored Procedure.</returns>
public DbCommand GetStoredProcedureCommand(string storedProcName)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
DbCommand cmd = this.Connection.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcName;
return cmd;
}
#region : Parameters :
//comm --/<summary>Adds an input parameter to the given <see cref="DbCommand"/>.</summary>
//comm --/<param name="cmd">The command object the parameter should be added to.</param>
//comm --/<param name="paramName">The identifier of the parameter.</param>
//comm --/<param name="paramType">The type of the parameter.</param>
//comm --/<param name="value">The value of the parameter.</param>
//comm --/<returns>The <see cref="DbParameter"/> that was created.</returns>
public DbParameter AddInParam(DbCommand cmd, string paramName, DbType paramType, object value)
{
DbParameter param = cmd.CreateParameter();
param.DbType = paramType;
param.ParameterName = paramName;
param.Value = value;
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
return param;
} //eof method AddInParam
//comm --/<summary>Adds an input parameter to the given <see cref="DbCommand"/>.</summary>
//comm --/<param name="cmd">The command object the parameter should be added to.</param>
//comm --/<param name="paramName">The identifier of the parameter.</param>
//comm --/<param name="paramType">The type of the parameter.</param>
//comm --/<param name="size">The maximum size in bytes, of the data table column to be affected.</param>
//comm --/<param name="value">The value of the parameter.</param>
//comm --/<returns>The <see cref="DbParameter"/> that was created.</returns>
public DbParameter AddInParam(DbCommand cmd, string paramName, DbType paramType, int size, object value)
{
DbParameter param = cmd.CreateParameter();
param.DbType = paramType;
param.ParameterName = paramName;
param.Size = size;
param.Value = value;
param.Direction = ParameterDirection.Input;
//debugGenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf (ref userObj , "Adding IN param " + value.ToString ());
cmd.Parameters.Add(param);
return param;
}
public DbParameter AddInOutParam (DbCommand cmd, string paramName, DbType paramType, int size, object value)
{
DbParameter param = cmd.CreateParameter ();
param.DbType = paramType;
param.ParameterName = paramName;
param.Size = size;
param.Value = value;
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add (param);
//debug if needed here
return param;
}
public DbParameter AddInOutParam (DbCommand cmd, string paramName, DbType paramType, object value)
{
DbParameter param = cmd.CreateParameter ();
param.DbType = paramType;
param.ParameterName = paramName;
param.Value = value;
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add (param);
return param;
}
#endregion
#region : Executes :
//comm --/<summary>Executes the specified command against the current connection.</summary>
//comm --/<param name="cmd">The command to be executed.</param>
//comm --/<returns>Result returned by the database engine.</returns>
public int ExecuteNonQuery(DbCommand cmd)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
return cmd.ExecuteNonQuery();
}
//comm --/<summary>Executes the specified command against the current connection.</summary>
//comm --/<param name="cmd">The command to be executed.</param>
//comm --/<param name="txn">The database transaction inside which the command should be executed.</param>
//comm --/<returns>Result returned by the database engine.</returns>
public int ExecuteNonQuery(DbCommand cmd, DbTransaction txn)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
cmd.Transaction = txn;
return cmd.ExecuteNonQuery();
}
//comm --/<summary>Executes the specified command against the current connection.</summary>
//comm --/<param name="cmd">The command to be executed.</param>
//comm --/<returns>Result returned by the database engine.</returns>
public DbDataReader ExecuteReader(DbCommand cmd)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
return cmd.ExecuteReader();
}
//comm --/<summary>Executes the specified command against the current connection.</summary>
//comm --/<param name="cmd">The command to be executed.</param>
//comm --/<param name="behavior">One of the <see cref="System.Data.CommandBehavior"/> values.</param>
//comm --/<returns>Result returned by the database engine.</returns>
public DbDataReader ExecuteReader(DbCommand cmd , CommandBehavior behavior)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
return cmd.ExecuteReader(behavior);
}
//comm --/<summary>Executes the specified command against the current connection.</summary>
//comm --/<param name="cmd">The command to be executed.</param>
//comm --/<returns>Result returned by the database engine.</returns>
public T ExecuteScalar<T>(DbCommand cmd, T defaultValue)
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
object retVal = cmd.ExecuteScalar();
if (null == retVal || DBNull.Value == retVal)
return defaultValue;
else
return (T)retVal;
}
//comm --/<summary>Executes the specified command against the current connection.</summary>
//comm --/<param name="cmd">The command to be executed.</param>
//comm --/<returns>Result returned by the database engine.</returns>
public DataSet ExecuteDataSet(DbCommand cmd)
{
ADAPTER_TYPE adapter = new ADAPTER_TYPE();
adapter.SelectCommand = (COMMAND_TYPE)cmd;
DataSet retVal = new DataSet();
adapter.Fill(retVal);
return retVal;
}
////comm --/<summary>Executes the specified command against the current connection.</summary>
////comm --/<param name="cmd">The command to be executed.</param>
////comm --/<returns>Result returned by the database engine.</returns>
//public DataSet ExecuteDataSet(DbCommand cmd)
//{
// ADAPTER_TYPE adapter = new ADAPTER_TYPE();
// adapter.SelectCommand = (COMMAND_TYPE)cmd;
// //cmd.CommandTimeout = 3600
// DataSet retVal = new DataSet();
// adapter.Fill(retVal);
// return retVal;
//}
#endregion
#endregion
//comm --/<summary>Begins a transaction.</summary>
//comm --/<returns>Created transaction.</returns>
public DbTransaction BeginTransaction()
{
if (this.Connection.State != ConnectionState.Open)
this.Connection.Open();
return Connection.BeginTransaction();
}
#region : Construction/Destruction :
//comm --/<summary>Disposes the resources associated with the current database connection.</summary>
~AbstractDatabase()
{
Dispose();
}
#region IDisposable Members
//comm --/<summary>Disposes the resources associated with the current database connection.</summary>
public void Dispose()
{
if (null != internal_currentConnection)
{
internal_currentConnection.Dispose();
internal_currentConnection = null;
}
}
#endregion
#endregion
} //eof public abstract class AbstractDatabase
} //eof namespace Providers.nsDb
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
namespace GenApp.Core.Providers.nsDb
{
public class Database : AbstractDatabase<SqlConnection, SqlCommand, SqlDataAdapter>
{
private string _ConnectionString;
public string ConnectionString
{
get { return _ConnectionString; }
set { _ConnectionString = value; }
} //eof property FieldName
public Database (string connectionStr)
{
//debugGenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(ref userObj , " CHECK --- nsDb.Database using the following connection string " + connectionStr);
this.ConnectionString = connectionStr;
} //eof constructor
protected override string GetConnectionString ()
{
//GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf (ref userObj , "In GetConnectionString the ConnectionString is " + this.ConnectionString);
//GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf (ref userObj , "The comming fromURL IS " + commingFromURL);
return this._ConnectionString;
} //eof protected override string GetConnectionString()
} //eof class
} //eof namespace Providers.nsDb
//所以會使用這樣的: //
公共BOOL RunProcGetDs(REF string信息,字符串則domainName ,string procedureName,ref DataSet ds) {
#region Action
try
{
using (Database db = new Database (_ConnectionString))
{
DbCommand cmd = db.GetStoredProcedureCommand (procedureName);
db.AddInParam (cmd, "@domain_user", DbType.String, (object)domainName);
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf (ref userObj , "METHOD START --- MetaDbControl.cs RunProcGetDs + \n");
ds = db.ExecuteDataSet (cmd);
Utils.Debugger.DebugDataSet("from RunProcGetDs ", ref ds);
//debug msg = "Select the values for your reports";
return true;
} //eof using
} //eof try
#endregion Action
#region CatchExceptionsAdv4
catch (NullReferenceException nre)
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; " ;
userObj.Mc.MethodName += methodName + " ; " ;
userObj.Mc.DebugMsg += nre.Message;
if (DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(userObj.Mc.Msg); } return false; } // EOF趕上
catch (System.InvalidOperationException ioe) //comm -- occurs when no result set was found !!!
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; " ;
userObj.Mc.MethodName += methodName + " ; " ;
userObj.Mc.DebugMsg += ioe.Message;
if (DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(userObj.Mc.Msg); } return false; } // EOF趕上(System.InvalidOperationException)
catch (System.IndexOutOfRangeException ioore) //comm -- occurs when no result set was found !!!
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; " ;
userObj.Mc.MethodName += methodName + " ; " ;
userObj.Mc.DebugMsg += ioore.Message;
if (DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(userObj.Mc.Msg); } return false; } // EOF趕上(System.IndexOutOfRangeException)
catch (System.Data.SqlClient.SqlException sqle)
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; " ;
userObj.Mc.MethodName += methodName + " ; " ;
userObj.Mc.DebugMsg += sqle.Message;
if (DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(userObj.Mc.Msg); } return false; } // EOF趕上
catch (System.FormatException fe)
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; " ;
userObj.Mc.MethodName += methodName + " ; " ;
userObj.Mc.DebugMsg += fe.Message;
if (DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(userObj.Mc.Msg); } return false; } // EOF趕上
catch (Exception ex)
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame (1).GetMethod().Name;
string className = st.GetFrame (1).GetFileName();
int lineNumber = st.GetFrame (1).GetFileLineNumber();
string encryptedErrorCode = String.Empty;
encryptedErrorCode += "className - " + className + " methodName ";
encryptedErrorCode += methodName + " lineNumber " + lineNumber.ToString();
encryptedErrorCode += userObj.DomainName;
if (System.Convert.ToInt16 (BL.Conf.Instance.Vars["EncryptErrorMessages"]) == 1)
encryptedErrorCode = Utils.DataEncryption.EncryptString (encryptedErrorCode, userObj.DomainName);
userObj.Mc.Msg = "An error in the application occurred. Report the following error code " + encryptedErrorCode;
userObj.Mc.ClassName += className + " ; " ;
userObj.Mc.MethodName += methodName + " ; " ;
userObj.Mc.DebugMsg += ex.Message;
if (DbDebugger.DebugAppError (ref userObj) == false)
{
userObj.Mc.Msg = "Failed to debug application error at " + methodName;
GenApp.Core.Providers.nsDbMeta.DbDebugger.WriteIf(userObj.Mc.Msg); } return false; } // EOF趕 #endregion CatchExceptionsAdv4
} //eof method
- 1. SQL Lite數據類型 - C#
- 2. 使用android sql lite數據庫
- 3. C++ Qt sql lite數據庫連接問題
- 4. mysql lite數據庫cordova
- 5. W3C,Google Gears和Loki Geolocation基於什麼?
- 6. Google Gears for a Social Network?
- 7. 從SQL Lite數據庫檢索數據到EditText中
- 8. 插入數據到數據庫Sql lite在android中
- 9. SQL和C# - 標籤從SQL數據庫
- 10. 加密Google Gears Workerpool中的JSON
- 11. Google Gears的SQLite字符編碼
- 12. 沒有Google Gears的Google Geolocation API?
- 13. Android設備上的SQL Lite數據庫與SQL Server數據庫之間的同步數據庫
- 14. 使用Google Gears離線訪問MoinMoin wiki
- 15. C#和SQL Server數據庫錯誤
- 16. Google Gears/HTML5的JavaScript包裝器
- 17. Android SQL Lite幫助:創建數據庫表
- 18. Android的SQL-Lite數據庫支持關鍵約束
- 19. Android從HTML5訪問嵌入式sql lite數據庫
- 20. 如何在sql lite數據庫中插入字符串值?
- 21. 填充SQL Lite數據庫空白時轉移到ipad
- 22. 在我的sql lite數據庫中保存5000個對象
- 23. 如何將xml文件插入到sql lite數據庫中
- 24. Xcode 8中sql lite數據庫的位置在哪裏?
- 25. 在Phonegap中訪問預先填充的SQL Lite數據庫
- 26. 沒有couchbase lite真的沒有sql數據庫
- 27. 適用於Android的SQL Lite數據庫持久存儲器
- 28. 在Java中使用Sql Lite數據庫顯示評級欄
- 29. sql lite如何在android中使用數據庫中的文件
- 30. SQL和數據庫
需要注意的是對大碼的Dispose模式實現被打破,通過終結處置的時候,你不應該處置管理的資源。 – 2009-03-01 11:15:44