Avatar billede fagerli Nybegynder
16. august 2006 - 19:20 Der er 20 kommentarer og
2 løsninger

klasser i C# med sql

Hej alle.
Jeg sidder og laver et program som skal have tit lave en forbinelse til min sql, og det skal jeg ret tit, så jeg vil lige hører om jeg kan lave en en klasse kan klare det eller skal jeg forsætte som jeg har gjort tidligere

Jeg gøre det som understående:

        string sqlstr,connstring;
        connstring = "Dsn=mysqlodbc;database=hairfasion;description=budevirke;option=0;port=0;server=localhost;uid=root;pwd=adminaccess";
        OdbcConnection conn = new OdbcConnection(connstring);
        OdbcCommand cmd = new OdbcCommand(sqlstr, conn);
        conn.Open();
        cmd.ExecuteReader();
        conn.Close();
Avatar billede Syska Mester
16. august 2006 - 19:21 #1
Ja, det kan du godt.
Avatar billede arne_v Ekspert
16. august 2006 - 19:23 #2
ja

men jeg vil anbefale MySQL Connector for .NET fromfor ODBC
Avatar billede Syska Mester
16. august 2006 - 20:24 #3
Bruger selv den MySQL connector .... men er der nogle performance forbedringer i den i forhold til ODBC? eller hvad er grunden til at du anbefaler den?
Avatar billede arne_v Ekspert
16. august 2006 - 20:44 #4
ODBC:

applikation (.NET kode skrevet af dig)
ADO.NET provider (.NET kode skrevet af MS)
ODBC (Win32 kode skrevet af MS)
MySQL ODBC driver (Win32 kode skrevet af MySQL)
TCP/IP
database

connector:

applikation (.NET kode skrevet af dig)
ADO.NET provider (.NET kode skrevet af MySQL)
TCP/IP
database

faerre lag = bedre performance

jeg tvivler dog paa at det betyder ret meget
Avatar billede arne_v Ekspert
16. august 2006 - 20:45 #5
der er 2 gode grunde til at jeg anbefaler connector over ODBC:

1)  bedre fejl meddelelser

    ODBC sucks til fejlmeddelelser

2)  XCOPY deployment af connectoren

    ODBC driveren skal installeres
Avatar billede Syska Mester
16. august 2006 - 20:51 #6
Ja, det kan jeg godt se .... der er nogle flere lag der kan fejle ved ODBC....
Avatar billede fagerli Nybegynder
16. august 2006 - 21:25 #7
så det er altså på den gode gamle dags måde jeg skal gøre det ??
Avatar billede arne_v Ekspert
16. august 2006 - 21:44 #8
nu naerlaeser jeg lige dit spoergsmaal

spoerger du om hvorvidt du skal bruge kode som angivet i spoergsmaalet ?

det har buzzzz og mig svaret paa ovenfor

eller spoerger du om ovenstaaende database kode skal flyttes ud af dine normale
klasser og over i en saerlig database klasse ?

saa er det et helt andet spoergsmaal (og det korte svar er at du skal lave en
saerlig database klasse, men du skal have en masse detaljer)
Avatar billede fagerli Nybegynder
16. august 2006 - 21:55 #9
nej jeg bruger koden som den er til forbinde til min sql, det jeg vil vide er om jeg kan lave en klasse som laver denne forbindelse eller skal jeg angi koden hver gang jeg skal bruuge min sql
Avatar billede arne_v Ekspert
16. august 2006 - 22:00 #10
du boerg opdele din applikation i lag

connection string boer ligge i konfigurations fil ikke i koden

hvis du bruger de samme linier kode flere steder saa boer de samles i en
separat klasse/metode
Avatar billede fagerli Nybegynder
16. august 2006 - 22:07 #11
det gøre jeg, men ved ikke lge hvordan jeg slipper af sted med det
Avatar billede arne_v Ekspert
17. august 2006 - 03:02 #12
prøv og lav en klasse og post den for kommentarer
Avatar billede fagerli Nybegynder
17. august 2006 - 09:15 #13
Dette er hvad jeg er kommet frem til måske ville virker.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Odbc;

namespace hairfasion
{
    public class Class1
    {
        public void forbindelse()
        {
            connstring = "Dsn=mysqlodbc;database=hairfasion;description=budevirke;option=0;port=0;server=localhost;uid=root;pwd=adminaccess";
            OdbcConnection conn = new OdbcConnection(connstring);
            OdbcCommand cmd = new OdbcCommand(sqlstr, conn);
            conn.Open();
            cmd.ExecuteReader();
            conn.Close();
        }
    }
}
Avatar billede md_craig Nybegynder
17. august 2006 - 09:58 #14
A: Skift til MySQL Connector, det er som Arne siger, noget bedre... Performance forbedringen er måske minimal, men kan faktisk måles i streds situationer (her jeg selv oplevet)... Dette kan sikkert også afhænge af så mange andre ting, men jeg vil ikke tro det er underligt at jeg har oplevet Performance forbedring på MySQL Connectoren frem for ODBC...

Link: http://mysql.com/downloads/connector/net/1.0.html

B: Den klasse du laver er i bund og grund "OK"... eller... men du får jo ikke noget udført? :P... ikke noget du får noget ud af hvertfald...

C: Den gode skik, og gode løsning er jo et desideret lag til at håndtere Database kald osv.. Vi plejer at kalde det tech (Teknisk lag)...

Dernæst (Tror), hvordan man så laver sin klasse til kaldene er jo lidt forskelligt... Jeg vil måske mene det er en god ide at du splitter det op sådan at du har en metode til at Gennerere din connection string ahløj (evt. bare i construcoren)... og så lagre den i klassen

Hvis du kun har en database du skal bruge, og ved dette... kan en singleton måske være en god ide...
Avatar billede fagerli Nybegynder
17. august 2006 - 13:57 #15
jeg kom op med en funktion som kunne gøre det jeg ønskede, det viste sig at jeg i farten at havde glemt at den skul returnere nogegt :)

i det store navn af vidensdeling, vil  jeg smide min løsning her :)

------------------------------------------------------------------------------------
public static object DoSQL(string sqlquery, string mode)
        {
            OdbcConnection conn1 = new    OdbcConnection("Dsn=mysqlodbc;database=hairfasion;description=budevirke;option=0;port=0;server=localhost;uid=root;pwd=adminaccess");
            OdbcCommand cmd1 = new OdbcCommand(sqlquery, conn1);
            conn1.Open();

            switch (mode)
            {
                case "datareader":
                    {
                        OdbcDataReader rd1 = cmd1.ExecuteReader();
                        return rd1;
                    }
                case "nonquery":
                    {
                        cmd1.ExecuteNonQuery();
                        break;
                    }
                case "scalar":
                    {
                        string str = cmd1.ExecuteScalar().ToString();
                        return str;
                    }
            }
            return false;
        }
-------------------------------------------------------------------------------------

angåne pointene, ved jeg ikke lige hvem der skal have dem :S
Avatar billede arne_v Ekspert
18. august 2006 - 02:36 #16
hvad med en deler ?
Avatar billede md_craig Nybegynder
18. august 2006 - 08:55 #17
Jeg vil stadig smide det ud i forskellige metoder hvis det var mig...

  class DBHandler
  {
    IDbConnection conn;

    public DBHandler()
    {
      conn = (IDbConnection)new OdbcConnection( "Dsn=mysqlodbc;database=hairfasion;description=budevirke;option=0;port=0;server=localhost;uid=root;pwd=adminaccess" );
    }

    public string ExecuteScalar( string sqlquery )
    {
      IDbCommand cmd = (IDbCommand) new OdbcCommand( sqlquery, this.conn );
      this.conn.Open();
      try
      {
        return cmd.ExecuteScalar().ToString();
      }
      catch
      {
        return null;
      }
      this.conn.Close();
    }

    public int ExecuteNonQuery( string sqlquery )
    {
      IDbCommand cmd = (IDbCommand)new OdbcCommand( sqlquery, this.conn );
      this.conn.Open();
      try
      {
        return cmd.ExecuteNonQuery();
      }
      catch
      {
        return -1;
      }
      this.conn.Close();
    }

    public IDataReader ExecuteReader( string sqlquery )
    {
      IDbCommand cmd = (IDbCommand)new OdbcCommand( sqlquery, this.conn );
      this.conn.Open();
      try
      {
        return cmd.ExecuteReader();
      }
      catch
      {
        return null;
      }
      this.conn.Close();
    }
  }

Hvis jeg nu skulle holde det til en klasse og med SQL sætninger...
Avatar billede fagerli Nybegynder
18. august 2006 - 10:34 #18
er med på en deler, så hvis md_craig(mener jeg) og arne v lige sender svar
Avatar billede arne_v Ekspert
19. august 2006 - 00:19 #19
svar
Avatar billede md_craig Nybegynder
19. august 2006 - 10:23 #20
og et her fra også :D
Avatar billede fagerli Nybegynder
19. august 2006 - 13:00 #21
så'en, tak skal i have :)
Avatar billede skooter Nybegynder
12. december 2007 - 11:53 #22
tusind tak. den har jeg ledt længe efter... heh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester