views:

1170

answers:

4

Under the covers, Google Gears uses SQL Lite as its data store. Has anyone successfully connected to the Google Gears SQL Lite DB with C#?

Thanks

A: 

I haven't tried personally, but maybe this thread helps a little: http://objectmix.com/csharp/309804-using-sqlite-c.html

Good luck with that!

Tilek
A: 

//Hi , Try this one : //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 -- / //comm -- / Abstract base class for encapsulating provider independant database interactin logic. //comm -- / //comm -- / derived Connection type. //comm -- / derived Command type. //comm -- / derived Data Adapter type. public abstract class AbstractDatabase : 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 {

    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

YordanGeorgiev
Note that the dispose pattern implementation on that big code is broken, you should not dispose of managed resources when disposing via the finalizer.
Lasse V. Karlsen
A: 

//so would use it like this : //

public bool RunProcGetDs ( ref string msg, 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

  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 catch (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 catch (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

  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

  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 catch #endregion CatchExceptionsAdv4

 } //eof method
YordanGeorgiev
A: 

Hi,

have a look at my favorite SQLite ADO.NET Wrapper, which I personally use in a lot of projects. I suppose, that Google Gears is using a default SQLite database with a little bit of modifications in the code to prevent ATTACH and #PRAGMA uses. But the dataformat should be identical and so you should be able to access it using this wrapper.

Best regards, Martin

Martin C.