View Full Version: pour accéder a une base de donnée mysql par exempl

RunUO.FR Support > comment on fait ... > pour accéder a une base de donnée mysql par exempl


Title: pour accéder a une base de donnée mysql par exempl
Description: possible ou pas ?


Hughlander - July 21, 2004 03:34 PM (GMT)
Tout est dans le titre j'aimerai savoir si il est possible d'accéder a une bdd comme mysql et si oui comment.
En théorie ca doit etre possible vu la nature même du langage utilisé mais faut voir les méthodes et les namespaces a utiliser.

slade15 - July 21, 2004 04:40 PM (GMT)
carement une base de donné, le langague le permet effectivement mais je ne pense pas que UO ai une base de donné

Hughlander - July 21, 2004 05:02 PM (GMT)
On peut en java si le C# est si proche du java il suffit de trouver le nom de la namespace qui est en relation avec les bdd et les sgbd ensuite connaitre les méthodes de ce/ces namespaces puis avec un serveur mysql (ou un autre sgbd) le tour devrai etre joué

slade15 - July 22, 2004 12:02 AM (GMT)
c'est ce que j'ai dit le C# permet de le faire mais pour ca faut que RunUo utilise mysql

Dihel - July 22, 2004 10:43 AM (GMT)
ba run uo utilise la framework non .? il n'y aurais pas la dedans de quoi communiquer avec une bdd . ?
(c un hipothese vu que le c# g finalement pas asser de tmeps pour m'i pencher amon grand regre)

Dihel - August 30, 2004 02:16 PM (GMT)
huhu tout y est avec runuo 1

RunUO 1.0 RC0\Scripts\Engines\MyRunUO

sur le site de runuo

enfin je pence que c'est bien ca.
je suis entrain de faire des tests

aparement on peut donc contacter la base apres a partire d'un site web.
parcontre fodra bien securiser tout ca... eviter l'ecriture quoi ...

Dihel - August 30, 2004 02:21 PM (GMT)
lol jeme suis emabler aparement ca ne sauvegarde dans la base que des info sur les joueurs...
les saves restent au meme endroi, mais c deja bien non ?
de plus une fois le principe compris, on doit pouvoir y stocker bien plus de truk non ... ?

comme est la version de base, c'est une sorte de status du serveur un peut plus poussé :)

slade15 - August 30, 2004 05:26 PM (GMT)
j'ai jeté un coup d'oeil mais j'ai rien compris avec tout son truc en anglais
si quelqu'un arrivais a faire les pages web comme il a fait ca serai gentil de faire un petit tuto en francais

Didi - August 30, 2004 08:05 PM (GMT)
Oui on peut ...

Et il y a ici un très bon tuto si vous êtes avancer en c# un peu :P

je le trouve pas, je cherche plus tard :P


Didi - August 31, 2004 12:59 AM (GMT)
voila.

C'est un totorial pour bdd Access.
Comme tu a demander mysql uniquement comme exemple, ce petit bout de code peut p-e t'être utile ... je continue quand meme de chercher un truc pour mysql.

Donc, en gros, c'Est un code source avec plein de fontion utile pouvant servir a un programme souhaitant une bdd access.

QUOTE
Ce fichier a été téléchargé depuis
http://www.csharpfr.com/article.aspx?ID=115


CODE
using System;
using System.Collections;
using System.Data;
using System.Data.OleDb;

namespace WindowsApplication3
{
public class BaseAccess
{
 private string filename;
 private string connStr;
 private OleDbConnection oConn;
 private OleDbDataReader rdr;
 private OleDbCommand oCmd;

 // type record contenant le nom d'une colonne et sa valeur associée
 public struct record
 {
  public record(string column_name, object content)
  {
   this.column_name = column_name;
   this.content = content;
  }

  public string column_name;
  public object content;
 }

 // constructeur nécessitant le path du fichier base de donnée Access
 public BaseAccess(string filename)
 {
  this.filename = filename;
  this.connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename;
 }

 // établie une connexion sur la base Access
 public bool Open()
 {
  try
  {
   this.oConn = new OleDbConnection(this.connStr);
   this.oConn.Open();
   return true;
  }
  catch
  {
   return false;
  }
 }

 // ferme la connexion à la base Access
 public bool Close()
 {
  try
  {
   this.oConn.Close();
   return true;
  }
  catch
  {
   return false;
  }
 }

 // execute une requête SQL sur la base Access
 public bool Execute(string ordre)
 {
  try
  {
   this.oCmd = new OleDbCommand(ordre,this.oConn);
   this.rdr = this.oCmd.ExecuteReader();
   return true;
  }
  catch
  {
   return false;
  }
 }

 // renvoi une ArrayList contenant des enregistrements de type record
 // contenant les différents champs de la ligne lue
 public ArrayList Fetch()
 {
  ArrayList row = new ArrayList();

  if (this.rdr.Read())
  {
   record rec;

   for (int i=0;i<this.rdr.FieldCount;i++)
   {
    rec.column_name = this.rdr.GetName(i);
    rec.content = this.rdr[i];
    row.Add(rec);
   }
  }

  return row;
 }

 // renvoi une ArrayList contenant des string correspondantes aux valeurs
 // dans la colonne spécifiée
 public ArrayList ProjectionColumn(string column_name,string table_name)
 {
  ArrayList projection = new ArrayList();

  if (this.Execute("SELECT "+column_name+" FROM "+table_name))
  {
   ArrayList row;
 
   while ((row = this.Fetch()).Count > 0)
   {
    projection.Add(((record)row[0]).content);
   }
  }

  return projection;
 }

 // renvoi une ArrayList contenant des string correspondantes aux différents noms
 // de colonnes de la table passée en paramètre
 public ArrayList GetColumnsNames(string table_name)
 {
  ArrayList columns = new ArrayList();

  if (this.Execute("SELECT * FROM "+table_name))
  {
   for (int i=0;i<this.rdr.FieldCount;i++)
   {
    columns.Add(this.rdr.GetName(i));
   }
  }

  return columns;
 }

 // renvoi une ArrayList contenant des ArrayList contenant chacune les différents
 // champs des colonnes de la table spécidiée en paramètre
 public ArrayList ProjectionTable(string table_name)
 {
  ArrayList rows = new ArrayList();

  if (this.Execute("SELECT * FROM "+table_name))
  {
   ArrayList row;
   while ((row = this.Fetch()).Count > 0)
   {
    rows.Add(row);
   }
  }

  return rows;
 }

 // renvoi une ArrayList contenant des ArrayList contenant chacune les différents
 // champs des colonnes passées en paramètre de la table spécidiée
 public ArrayList ProjectionColumns(string[] columns_name,string table_name)
 {
  ArrayList rows = new ArrayList();

  if (this.Execute("SELECT "+string.Join(",",columns_name)+" FROM "+table_name))
  {
   ArrayList row;
   while ((row = this.Fetch()).Count > 0)
   {
    rows.Add(row);
   }
  }

  return rows;
 }

 // renvoi les types des colonnes d'une table
 public ArrayList GetColumnsTypes(string table_name)
 {
  ArrayList types = new ArrayList();
  record rec;

  if (this.Execute("SELECT * FROM "+table_name))
  {
   for (int i=0;i<this.rdr.FieldCount;i++)
   {
    rec.column_name = this.rdr.GetName(i);
    rec.content = this.rdr.GetFieldType(i).ToString();
    types.Add(rec);
   }
  }

  return types;
 }

 // insert une line dans une table
 public bool InsertRow(ArrayList columns, string table_name)
 {
  string order = "INSERT INTO "+table_name+"(";
  ArrayList columns_values = new ArrayList();

  foreach (record rec in columns)
  {
   // on rajoute les colonnes a remplir
   order += rec.column_name + ",";
   // on fait la liste des valeurs a ajouter
   columns_values.Add(rec.content);
  }

  // on supprime le virgule a la fin
  order = order.Substring(0,order.Length-1);
  order += ") VALUES(";

  foreach (object val in columns_values)
  {
   if (val is string || val is DateTime)
   {
    order += "'" + val + "',";
   }
   else
   {
    order += val + ",";
   }
  }

  order = order.Substring(0,order.Length-1);
  order += ")";

  Console.Out.WriteLine("tentative de soumission : "+order);
  return this.Execute(order);
 }

 public bool DeleteRows(ArrayList rows_id, string table_name)
 {
  return false;
 }
}
}




Hosted for free by InvisionFree