Avatar billede starf Nybegynder
28. september 2004 - 17:44 Der er 15 kommentarer og
1 løsning

problemer fra acces til mysql

Er igang med at flytte mit program fra en acces database til en mysql.. o har lidt problemer..

får følgende fejl:

D:\DatabaseSample\DatabaseSampleVirker\DatabaseSampleVirker\DatabaseSampleVirker\Main.cs(1082): The type or namespace name 'adapter' could not be found (are you missing a using directive or an assembly reference?)

ved denne linie

adapter.Fill(dt);

Hele koden ser sådan her ud:

        public void UpdateList3()
        {   
            MySqlConnection myConn = new MySqlConnection( getDatabaseDNS());
            //OleDbConnection myConn = new OleDbConnection( getDatabaseDNS());
            myConn.Open();
       
            //OleDbConnection Conn = new OleDbConnection();
            //Henter output fra databasen id1 fra tekst.. og smider ned i Idlink (ComboBox)...
            //OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT id1 FROM tekst", myConn);
            MySqlDataAdapter myCmd = new MySqlDataAdapter ("SELECT id1 FROM tekst", myConn);
       
            DataTable dt = new DataTable();
           
            adapter.Fill(dt);
            IdLink.DataSource = dt;
            IdLink.DisplayMember = "id1";
            //OleDbCommand cmd;

       
            myConn.Close();   
        }
Avatar billede arne_v Ekspert
28. september 2004 - 17:47 #1
MySqlDataAdapter myCmd = new MySqlDataAdapter ("SELECT id1 FROM tekst", myConn);

adapter.Fill(dt);

Skal myCmd ikke være adapter ?
Avatar billede starf Nybegynder
28. september 2004 - 18:19 #2
altså

MySqlDataAdapter adapter = new MySqlDataAdapter ("SELECT id1 FROM tekst", myConn);

jo ser ud til at virke.. :) tak
Avatar billede starf Nybegynder
28. september 2004 - 18:23 #3
kan du så også se hvorfor jeg får følgende fejl:

D:\DatabaseSample\DatabaseSampleVirker\DatabaseSampleVirker\DatabaseSampleVirker\Main.cs(1813): The best overloaded method match for 'ByteFX.Data.MySqlClient.MySqlDataAdapter.MySqlDataAdapter(string, ByteFX.Data.MySqlClient.MySqlConnection)' has some invalid arguments

cmd=new MySqlCommand(strSQL,myConn);

D:\DatabaseSample\DatabaseSampleVirker\DatabaseSampleVirker\DatabaseSampleVirker\Main.cs(1813): Argument '2': cannot convert from 'System.Data.OleDb.OleDbConnection' to 'ByteFX.Data.MySqlClient.MySqlConnection'

MySqlDataAdapter myCmd = new MySqlDataAdapter ( SQL, myConn );

D:\DatabaseSample\DatabaseSampleVirker\DatabaseSampleVirker\DatabaseSampleVirker\Main.cs(1819): The best overloaded method match for 'ByteFX.Data.MySqlClient.MySqlCommand.MySqlCommand(string, ByteFX.Data.MySqlClient.MySqlConnection)' has some invalid arguments

MySqlDataAdapter myCmd = new MySqlDataAdapter ( SQL, myConn );

D:\DatabaseSample\DatabaseSampleVirker\DatabaseSampleVirker\DatabaseSampleVirker\Main.cs(1819): Argument '2': cannot convert from 'System.Data.OleDb.OleDbConnection' to 'ByteFX.Data.MySqlClient.MySqlConnection'

cmd=new MySqlCommand(SQL, myConn);

D:\DatabaseSample\DatabaseSampleVirker\DatabaseSampleVirker\DatabaseSampleVirker\Main.cs(1819): Argument '2': cannot convert from 'System.Data.OleDb.OleDbConnection' to 'ByteFX.Data.MySqlClient.MySqlConnection'

cmd=new MySqlCommand(SQL, myConn);


hele koden er:

private void button4_Click(object sender, System.EventArgs e)
        {
            //vi finder det id nummer der skal slettes i bruger comboboxen
            string IDNummer3; //Creates a string
            for(int index = 0; index < lstItems4.SelectedItems.Count; index++) //Run through the list
            {
                //vi åbner databasen og sletter
                OleDbConnection myConn = new OleDbConnection( getDatabaseDNS());
                //vælger første collum og sletter fra det valgte id
                IDNummer3 = lstItems4.SelectedItems[0].SubItems[0].Text;    //Get the id number from the list (li.tag lini 186)
                string SQL = "DELETE * FROM bruger_order WHERE id = " + IDNummer3;
                MySqlDataAdapter myCmd = new MySqlDataAdapter ( SQL, myConn );
                //OleDbDataAdapter myCmd = new OleDbDataAdapter( SQL, myConn );
                myConn.Open();
                //kigger på sql streng
                MessageBox.Show(SQL.ToString());
                MySqlCommand cmd;
                cmd=new MySqlCommand(SQL, myConn);
                //OleDbCommand cmd;
                //cmd=new OleDbCommand(SQL,myConn);
                cmd.ExecuteNonQuery();       
                SQL = "";
                myConn.Close();
                MessageBox.Show("Slettet");

                //opdatere listen
                UpdateList8();
                UpdateList6();
            }
Avatar billede starf Nybegynder
28. september 2004 - 18:32 #4
har nu selv fået elimineret den første fejl
Avatar billede starf Nybegynder
28. september 2004 - 18:33 #5
damn så virker det.. så slipper du får at hjælpe mig mere :) tak for alt din hjælp!

smid et svar og få point
Avatar billede arne_v Ekspert
28. september 2004 - 18:34 #6
Ja det var jo bare OleDbConnection versus MySqlConnection ...
Avatar billede arne_v Ekspert
28. september 2004 - 18:35 #7
svar
Avatar billede starf Nybegynder
28. september 2004 - 18:38 #8
ja men ser mig tit blind i sådan noget :(
Avatar billede arne_v Ekspert
28. september 2004 - 19:27 #9
Du ville iøvrigt spare meget arbejde, hvis det var kodet med brug af interfaces
fremfor konkrete klasser fra start af !
Avatar billede Syska Mester
28. september 2004 - 19:30 #10
lidt grøn til C#, men har du en forklaring af det med interfaces og opbugning?
Avatar billede arne_v Ekspert
28. september 2004 - 19:34 #11
Prøv og se det her eksempel:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Odbc;

public class MultiDb
{
    public static IDbConnection GetConnection(string constr)
    {
        if(constr.ToUpper().IndexOf("DRIVER=") >= 0)
        {
            return new OdbcConnection(constr);         
        }
        else if(constr.ToUpper().IndexOf("PROVIDER=") >= 0)
        {
            return new OleDbConnection(constr);       
        }
        else if(constr.ToUpper().IndexOf("TRUSTED_CONNECTION=") >= 0 ||
                constr.ToUpper().IndexOf("INTEGRATED SECURITY=") >= 0)
        {
            return new SqlConnection(constr);         
        }
        else
        {
            return null;
        }
    }
}
class TestClass
{
    private static void test(string constr)
    {
        IDbConnection con = MultiDb.GetConnection(constr);
        con.Open();
        IDbCommand cmd = con.CreateCommand();
        cmd.CommandText = "SELECT * FROM T1";
        IDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            int f1 = (int)rdr[0];
            string f2 = (string)rdr[1];
            Console.WriteLine(f1 + " " + f2);
        }
        con.Close();
    }
    public static void Main(string[] args)
    {
        test("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Database\\MSAccess\\Test.mdb");
        test("server=ARNEPC2;Integrated Security=SSPI;database=Test");
    }
}
Avatar billede arne_v Ekspert
28. september 2004 - 19:36 #12
Det relevante er metoden test i klassen TestClass !

Fordi den bruger interfaces (IDbConnection fremfor SqlConnectopn/OleDbConnection/OdbcConnection),
så er den kode totalt database uafhængig.
Avatar billede starf Nybegynder
28. september 2004 - 19:41 #13
ja men det ser jo noget mere advanceret ud end det jeg er igang med nu!
Avatar billede arne_v Ekspert
28. september 2004 - 19:44 #14
Det er det faktisk ikke.

MultiDb klassen kan du stjæle og genbruge (der skal lige tilføjes MySQL).

Resten koder du stort set præcis ligesom du gør nu.

Du bruger bare konsekvent interfaces.
Avatar billede starf Nybegynder
28. september 2004 - 19:49 #15
Hmm kunne være man skulle kaste sig ud i det..

BTW tænkte om det var muligt at have f.eks. denne her kode i sit eget "script/class"

        {
            //adder til menu databasen
            MySqlConnection myConn = new MySqlConnection( getDatabaseDNS());
            //OleDbConnection myConn = new OleDbConnection( getDatabaseDNS());
            myConn.Open();
           
            string strLink = "<a href=\"" + sideload.Text +"?id="+ IdLink.Text +"\" target=\""+ TargetLink.Text +"\">"+ TekstLink.Text +"</a>";
            string strSQL="INSERT INTO menu(link,beskrivelse,idtarget,linktekst,target) VALUES('"+ strLink +"','"+ BeskrivelseLink.Text +"','"+ IdLink.Text +"','"+ IdLink.Text +"','"+ TargetLink.Text +"')";
            //string strSQL2="Insert INTO menu(idtarget) VALUES('"+ IdLink.Text +"')";
            //string strSQL="INSERT INTO menu(date) values (CDate(" + System.DateTime.Now + @")";
            //til at tjekke sql strengen med
            MessageBox.Show(strSQL.ToString());
            //MessageBox.Show(strSQL2.ToString());
            //Opdateret besked
            MessageBox.Show("Menuén er opdateret!");
            MySqlCommand cmd;
            //OleDbCommand cmd;
            //cmd=new OleDbCommand(strSQL,myConn);
            cmd=new MySqlCommand(strSQL,myConn);
            cmd.ExecuteNonQuery();       
            strSQL = "";
           
            myConn.Close();   

            //opdatere listen
            UpdateList();
            UpdateList5();
        }


og så kalde det "scipt/class" via en knap?

så man f.eks kunne have alle sine database ting i deres egne scripts/class og så bare kalde dem fra ens program?
Avatar billede arne_v Ekspert
28. september 2004 - 20:35 #16
Principielt ja.

Men det kræver sommetider lidt at lavet en database klasse rigtig.
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