Avatar billede s0mmer Nybegynder
15. februar 2009 - 14:37 Der er 12 kommentarer og
1 løsning

Oprette forbindelse til SQL

Hej eksperter,

Jeg er for nylig gået igang med min første C# applikation. Samtidig har jeg sat en lokal SQL server op som jeg gerne vil connecte til (i min C# applikation) gennem ISSP dvs uden user id og password.

Jeg har i mit vindue en listBox som jeg gerne vil have til at poste alle oprettede brugere ud. Dvs. 2 spørgsmål..

Hvordan tager jeg forbindelse til min SQL server? Intet af det jeg har googlet på har rigtig virket.

Og hvordan tilføjer jeg disse række til min listbox?


Og hvor skal koden ligge?


Håber i kan hjælpe..
Avatar billede arne_v Ekspert
15. februar 2009 - 15:15 #1
Et lille eksempel som virker hos mig:

using System;
using System.Data.SqlClient;

namespace E
{
    public class SqlServer1
    {
        public static void Main(string[] args)
        {
            SqlConnection con = new SqlConnection("server=ARNEPC3\\SQLEXPRESS;Integrated Security=SSPI;database=Test");
            con.Open();
            SqlCommand cre = new SqlCommand("CREATE TABLE j(id INTEGER NOT NULL, txt VARCHAR(50), PRIMARY KEY(id))", con);
            cre.ExecuteNonQuery();
            SqlCommand ins = new SqlCommand();
            ins.Connection = con;
            for(int i = 0; i < 5; i++)
            {
                ins.CommandText = "INSERT INTO j VALUES(" + (i+1) + ",'Test #" + (i+1) + "')";
                ins.ExecuteNonQuery();
            }
            SqlCommand sel = new SqlCommand("SELECT id,txt FROM j WHERE id > 3", con);
            SqlDataReader rdr = sel.ExecuteReader();
            while(rdr.Read())
            {
                int id = rdr.GetInt32(0);
                String txt = rdr.GetString(1);
                Console.WriteLine(id + " : " + txt);
            }
            rdr.Close();
            SqlCommand drp = new SqlCommand("DROP TABLE j", con);
            drp.ExecuteNonQuery();
            con.Close();
        }
    }
}
Avatar billede s0mmer Nybegynder
15. februar 2009 - 17:32 #2
arne_v > Som du ved er C# nyt for mig. Derfor har jeg nogle spørgsmål.

1. Denne vil printe noget ud i consollen, men hvor er den ? Når jeg trykker F5 og kører mit program, kan jeg ikke spotte nogen console?

2. Denne kode placerer jeg bare i min program.cs hvor min main er?
Avatar billede s0mmer Nybegynder
15. februar 2009 - 17:49 #3
arne_v > Det virker ihvertfald delvis.. den connectede korrekt og oprettede tabellen osv.. Jeg har ændret lidt til:

            // Connect to MS SQL
            SqlConnection con = new SqlConnection("server=S0MMER-WIN\\SQL;Integrated Security=SSPI;database=AppClouds");
            con.Open();

            // Select the users
            SqlCommand sqlCom = new SqlCommand("SELECT email FROM Users", con);
            SqlDataReader rdr = sqlCom.ExecuteReader();
            while (rdr.Read())
            {
                String userEmail = rdr.GetString(1);
                Console.WriteLine("User email: "+userEmail);
            }

Jeg går ud fra at getString(1) er søjle 1? Men jeg får en fejl på den linje. Har du en anelse hvorfor?
Tabellen Users er 3 søjlet, userID, email og password
Avatar billede arne_v Ekspert
15. februar 2009 - 17:51 #4
Hvis det er en console app - ikke en windows GUI app - så udskrive console i et sort "DOS" vindue.

Hvis det er en windows GUI app skal du ikke bruge Console.WriteLine men gemme data i noget der vises i din GUI app.
Avatar billede s0mmer Nybegynder
15. februar 2009 - 18:25 #5
arne_v > nvm jeg forstår det nu.. jamen det fungerer jo nu så. mange tak for hjælpen :) hvad "bruger" man generelt.. skal jeg connecte på denne måde hver eneste gang jeg skal noget med databsaen? Eller kan man lave en form for config hvor alt db connect er, som gør det lidt nemmere måske?
Avatar billede arne_v Ekspert
15. februar 2009 - 18:36 #6
Du skal lave en SqlConnection hvergang du skal noget med databasen.

Du behøver ikke have connection string hradcoded i koden. Den kan du have i app.config !
Avatar billede arne_v Ekspert
15. februar 2009 - 18:37 #7
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ExpressTest"].ConnectionString);

og en app.config med:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="ExpressTest"
            connectionString="Server=ARNEPC3\SQLEXPRESS;Integrated Security=SSPI;Database=Test"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>
Avatar billede s0mmer Nybegynder
15. februar 2009 - 18:43 #8
helt perfekt :) send svar og du får points.. mange tak for hjælpen arne_v
Avatar billede s0mmer Nybegynder
15. februar 2009 - 18:50 #9
arne_v > Hvis det er okay, så har jeg et >hurtigt< spørgsmål på falderebet.. Hvis jeg har flg:

            SqlCommand sqlCom = new SqlCommand("SELECT * FROM Users WHERE email = @email AND password = @password", Conn);
            sqlCom.Parameters.AddWithValue("@email", this.txtEmail.Text);
            sqlCom.Parameters.AddWithValue("@password", this.txtPassword.Text);
            SqlDataReader rdr = sqlCom.ExecuteReader();

Hvordan tæller jeg så antallet af række den finder?
Avatar billede arne_v Ekspert
15. februar 2009 - 18:55 #10
svar
Avatar billede arne_v Ekspert
15. februar 2009 - 18:56 #11
Du kan enten lave en SELECT COUNT først eller tælle op løbende i din while løkke.
Avatar billede arne_v Ekspert
15. februar 2009 - 18:57 #12
Hvis du bruger en collection type fremfor et fixed size array, saa behoever du ikke vide hvor mange raekker der er.
Avatar billede arne_v Ekspert
15. februar 2009 - 18:58 #13
Når du går igang med Win Forms så husk at kig på nogle af e controls der findes, hvir du bare binder en data source (f.eks. en data reader) til og så sørger .NET klasserne for det hele.
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