Utilizzando SQLite in C #, come aggiornare e lavorare con un file di database generato?

StackOverflow https://stackoverflow.com/questions/4199686

  •  11-10-2019
  •  | 
  •  

Domanda

Sto sviluppando un NET (C #) l'applicazione di un formato di file binario. Il piano è quello di migrare verso formato binario a un file di database SQLite che è più facile da mantenere.

Non ho mai usato questo prima quindi ho un paio di domande.

  1. L'applicazione SQLite di http://sqlite.phxsoftware.com/ contiene un fornitore di LINQ . Ho giocato con lui a livello locale, ma in qualche modo hanno a incorporare questo in qualcosa di un team di sviluppatori può utilizzare. Posso inserire il file di database sul mio PC in una cartella che è incluso nel repository di origine, ma alla fine si dovrebbe finire nella cartella clienti AppData. Come posso ottenere questo utilizzando un file di database generato? Quando creo il file di database manualmente posso facilmente dire l'applicazione dove memorizzarlo.

  2. ho una discreta conoscenza di query SQL, quindi il mio piano iniziale era quello di creare una libreria che fa un porto di uno DataModel al database utilizzando query SQL. Il rovescio della medaglia è che quando un campo cambia o si aggiunge devo aggiornare un sacco di cose: La banca dati creare query, l'aggiornamento del database o query alter, il DataModel. Da quanto ho capito che posso creare un database utilizzando il progettista, ma quando la mia domanda è aggiornato alla versione 2 il mese prossimo e la mia base di dati cambia voglio migrare database esistente dell'utente alla nuova versione. Facendo questo manualmente posso scrivere query di aggiornamento e di lavoro con una sorta di contatore di database incrementale per verificare questo, ma come fa questo lavoro utilizzando un database generato?

Quindi è meglio, più facile e sicuro da usare query SQL direttamente, o qualcuno mi può puntare a un decente utilizzabile caso d'uso di utilizzare un database generato?

Grazie.

È stato utile?

Soluzione

Per la vostra prima domanda ti posso suggerire per rendere l'applicazione in ASP.Net o usufruire del webservice (il secondo è più adatto per i propri obiettivi). Per webservices Credo che si dovrebbe codificare una sessione nella chiamata di un metodo come questo:

...
[WebMethod]
public DataSet GetData(object id, string sessionId)
{
   try
   {
      DataSet ds = null;
      CUser user = Global.GetSession(sessionId);

      lock
      {
         //Your code to get data from the database
      }
      return ds;
   }
   catch(Exception ex)
   {
       throw;
   }
}

Per la seconda domanda suggerisco di usare FluentNhibernate. Ho usato FluentNhibernate ed è molto facile da modellare il database e anche generarlo. Questo è solo un assaggio del codice utilizzato per configurare l'applicazione SQLite;

private static ISessionFactory CreateSessionFactory()
{
  return Fluently.Configure()
    .Database(
      SQLiteConfiguration.Standard
        .UsingFile("firstProject.db")
    )
    .Mappings(m =>
      m.FluentMappings.AddFromAssemblyOf<Program>())
    .ExposeConfiguration(BuildSchema)
    .BuildSessionFactory();
}

private static void BuildSchema(Configuration config)
{
  // delete the existing db on each run
  if (File.Exists(DbFile))
    File.Delete(DbFile);

  // this NHibernate tool takes a configuration (with mapping info in)
  // and exports a database schema from it
  new SchemaExport(config)
    .Create(false, true);
}

Si può vedere la FluentNhibernate wiki pagina e c'è un'implementazione di lancio di questo quadro. Infine per Admin Il tuo database SQLite io suggerisco di utilizzare SQLite amministratore .

alt text

Altri suggerimenti

In primo luogo, attrezzi System.Data.SQLite un provider ADO.NET prima di tutto. Dati-source la stringa di connessione è il file che si desidera manipolare, ma si potrà incorrere in problemi con SQLite se si sta cercando di accedervi da più luoghi. Ci sono soluzioni alternative documentate anche a che fare con il journaling e livelli di chiusura.

Per "creare" il db sul PC dell'utente, è possibile memorizzare un db vuoto in una risorsa e copiarlo nella posizione, o aprire un nuovo db ed eseguire un creare script per rendere le tabelle / etc.

In secondo luogo, STOP. Se avete intenzione di andare al di sopra e al di là di ADO.NET di astrarre la parte dati, basta usare un DB di astrazione esistente, non costruire il proprio.

NHibernate , c'è un driver per SQLite troppo!

Non sono sicuro di aver capito domanda 1. La vostra necessità programma per prendere un file di database pre-generati e metterlo nella cartella AppData del cliente, o fa il vostro bisogno programma per generare un nuovo file di database quando viene eseguito per la prima volta sulla macchina client e quindi memorizzare il file di database appena generato nella cartella AppData.

Per quanto riguarda la seconda domanda, non capisco che cosa si sta cercando di fare. La prego di chiarire e / o fornire una situazione di esempio?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top