Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 01:09 Der er 25 kommentarer og
1 løsning

Connection til database

Hej eksperter.

Jeg har lavet en database i c#. (Visual express 2005) Jeg mener den køre med SQL server express. Hvordan laver jeg en connection til denne.

Min database hedder: Database.mdf

Min table hedder: brugerPass

Den skal åbne en connection, udføre noget SQL, derefter close connection.

Men hvis det er en for stor mundfuld, så vil en connection være helt perfekt, da jeg nok godt kan finde ud af det andet.

Mvh

Martin Sørensen
Avatar billede arne_v Ekspert
24. oktober 2007 - 01:11 #1
En banal console app:

using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("Server=ARNEPC3;Integrated Security=SSPI;Database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT f1,f2 FROM t1", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            int f1 = (int)rdr[0];
            string f2 = (string)rdr[1];
            Console.WriteLine(f1 + " " + f2);
        }
        con.Close();
    }
}
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 01:14 #2
Det er til windows forms :) Kan jeg da bare bruge den samme lidt modificeret`?
Avatar billede arne_v Ekspert
24. oktober 2007 - 02:17 #3
Database kaldene er jo det samme.

Fremfor Console.WriteLine skal du så bruge data til et eller andet.
Avatar billede sherlock Nybegynder
24. oktober 2007 - 07:29 #4
Når det er MSSQL Express, er formatet sådan her.

Driver={SQL Native Client};Server=.\SQLExpress;AttachDbFilename=test.mdf; Database=test;Trusted_Connection=Yes;
Avatar billede lasserasch Juniormester
24. oktober 2007 - 08:45 #5
Og for lige at skabe en lille rød tråd, og følge arne's eksempel med sherlocks express modifikation, så ville connection string se således ud :

(Mdf VS ingen Mdf i strengen. P.S. ved godt det er småting, men alligevel....)

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("Server=ARNEPC3\sqlexpress;Integrated Security=SSPI;Database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT f1,f2 FROM t1", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            int f1 = (int)rdr[0];
            string f2 = (string)rdr[1];
            Console.WriteLine(f1 + " " + f2);
        }
        con.Close();
    }
}


/Lasse
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 10:23 #6
Tak for jeres svar.

Jeg har lavet følgende metode:

    public void dbConnect()
    {
        SqlConnection con = new SqlConnection("Server=ARNEPC3\sqlexpress;Integrated Security=SSPI;Database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT brugernavn,password FROM brugerPass", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string bruger = (string)rdr[0];
            string pass = (string)rdr[1];
           
            tbBrugernavn.Text = bruger;
            tbPassword.Text = pass;
        }
        con.Close();
    }
}
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 10:23 #7
Jeg får følgende fejl:

An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Hvordan laver jeg dette?

Mvh
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 10:24 #8
Sådan ser den ud:

    public void dbConnect()
    {
        SqlConnection con = new SqlConnection("Server=(local);Integrated Security=SSPI;Database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT brugernavn,password FROM brugerPass", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string bruger = (string)rdr[0];
            string pass = (string)rdr[1];
           
            tbBrugernavn.Text = bruger;
            tbPassword.Text = pass;
        }
        con.Close();
    }
}
Avatar billede lasserasch Juniormester
24. oktober 2007 - 10:51 #9
Kan du forbinde til din SQL Server fra et SQL management studio? F.eks. "Sql Server Management studio Express", som kan downloades gratis fra MS website.

En SQL Server express kræver at du sætter nogle ting op før den tillader forbindelser fra fjern computere. Det burde dog virke hvis sql serveren ligger på din lokale PC.

Hvordan virker denne connection string :

SqlConnection Conn = new SqlConnection("Data Source=localhost\sqlexpress; UID=ditusername; PWD=ditpassword; Database=dindatabase);


???

/Lasse
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 11:06 #10
Nu står den sådan:

public void dbConnect()
    {
        SqlConnection con = new SqlConnection("Data Source=localhost; UID=ditusername; PWD=ditpassword; Database=Database");

        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT brugernavn,password FROM brugerPass", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string bruger = (string)rdr[0];
            string pass = (string)rdr[1];
           
            tbBrugernavn.Text = bruger;
            tbPassword.Text = pass;
        }
        con.Close();
    }

Men jeg mener ikke der er password. Men den kommer stadig med samme fejl. Og burde der ikke være installeret en sql server sammen med visual express 2005?

I selve
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 11:06 #11
visual express 2005 kan jeg godt connecte til min database og ændre i denne.
Avatar billede lasserasch Juniormester
24. oktober 2007 - 11:19 #12
Det er altid nødvendigt at godkende sig op mod en SQL Server. Men der findes 2 former for godkendelse. Windows godkendelse og SQL godkendelse.

I din sidste connection string går jeg ud fra at du erstatter "ditusername" med et SQL brugernavn. og det samme med passwordet. Data Source skal være "localhost\sqlexpress".... Husk altid det.

/Lasse
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 11:25 #13
ja. Men der kommer en fejl :(

Error    1    Unrecognized escape sequence    C:\Documents and Settings\Martin CBS\Desktop\New Folder\WindowsApplication1_backup3\WindowsApplication1\Login.cs    47    65    WindowsApplication1
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 11:26 #14
på "localhost\sqlexpress"
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 11:30 #15
Jeg har nu følgende kode:

public void dbConnect()
    {
        SqlConnection con = new SqlConnection("Server=localhost\\sqlexpress;Integrated Security=SSPI;Database=Database.mdf");

        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT brugernavn,password FROM brugerPass", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string bruger = (string)rdr[0];
            string pass = (string)rdr[1];
           
            tbBrugernavn.Text = bruger;
            tbPassword.Text = pass;
        }
        con.Close();
    }


Den kommer med en fejl:

Cannot open database "Database.mdf" requested by the login. The login failed.
Login failed for user 'MARTIN_CBS\Martin CBS'.
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 11:39 #16
hvad skal jeg have installeret?

Jeg har Microsoft server management studio express, Microsoft SQL server 2005, Microsoft visual express 2005

Hvad skal sættes op?


Koden er følgende:

        public void dbConnect()
    {
        SqlConnection con = new SqlConnection("Server=localhost\\sqlexpress;Integrated Security=SSPI;Database=Database");

        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT brugernavn,password FROM brugerPass", con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string bruger = (string)rdr[0];
            string pass = (string)rdr[1];
           
            tbBrugernavn.Text = bruger;
            tbPassword.Text = pass;
        }
        con.Close();
    }


Fejlen er følgende:

System.Data.SqlClient.SqlException was unhandled
  Message="Cannot open database \"Database\" requested by the login. The login failed.\r\nLogin failed for user 'MARTIN_CBS\\Martin CBS'."
  Source=".Net SqlClient Data Provider"
  ErrorCode=-2146232060
  Class=11
  LineNumber=65536
  Number=4060
  Procedure=""
  Server="localhost\\sqlexpress"
  State=1
  StackTrace:
      at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
      at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
      at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
      at System.Data.SqlClient.SqlConnection.Open()
      at WindowsApplication1.Login.dbConnect() in C:\Documents and Settings\Martin CBS\Desktop\New Folder\WindowsApplication1_backup3\WindowsApplication1\Login.cs:line 49
      at WindowsApplication1.Login.anuller_Click(Object sender, EventArgs e) in C:\Documents and Settings\Martin CBS\Desktop\New Folder\WindowsApplication1_backup3\WindowsApplication1\Login.cs:line 42
      at System.Windows.Forms.Control.OnClick(EventArgs e)
      at System.Windows.Forms.Button.OnClick(EventArgs e)
      at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
      at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      at System.Windows.Forms.Control.WndProc(Message& m)
      at System.Windows.Forms.ButtonBase.WndProc(Message& m)
      at System.Windows.Forms.Button.WndProc(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
      at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      at System.Windows.Forms.Application.Run(Form mainForm)
      at WindowsApplication1.Program.Main() in C:\Documents and Settings\Martin CBS\Desktop\New Folder\WindowsApplication1_backup3\WindowsApplication1\Program.cs:line 17
      at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
      at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
      at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
      at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
      at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
      at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
      at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      at System.Threading.ThreadHelper.ThreadStart()

Min database hedder: Database.mdf (oprettet i visual studio express 2005)
Avatar billede lasserasch Juniormester
24. oktober 2007 - 11:57 #17
Din brugerkonto mangler rettigheder.

Jeg ville enten oprette en bruger på sql serveren, gennem dit management studio, som kun havde rettigheder til den pågældende database, ellers ville jeg sørge for at den bruger du er logget på computeren med, har nok rettigheder.

Er du lokal administrator på maskinen.

Ja det er selvfølgelig \\ og ikke \. tanke torsk fra min side...


/Lasse
Avatar billede martinsorensen Nybegynder
24. oktober 2007 - 12:01 #18
Jeg burde være adminstrator. Inde unde user accounts står der i hvert fald: computer administrator. Så det burde ikke være problemet.
Avatar billede lasserasch Juniormester
24. oktober 2007 - 14:24 #19
Jamen, så åben dit sql management studio, opret en bruger derinde og giv denne rettigheder ned til databasen. Og brug så denne konto når du forbinder fra dit program.

/Lasse
Avatar billede sherlock Nybegynder
24. oktober 2007 - 15:22 #20
Hvis SqlServer Express er standardinstalleret, skal man bruge AttachDbFileName.

Data Source=.\SQLEXPRESS;AttachDbFileName=e:\data\Customers.mdf;Integrated Security=True;User Instance=True

Taget fra:

http://msdn2.microsoft.com/en-us/library/ms228037.aspx
Avatar billede lasserasch Juniormester
24. oktober 2007 - 15:47 #21
Jeg har nu også installeret min SQL express server helt standard. Jeg bruger ikke attachdbfilename.

Jeg opretter min database fra management studio express, sørger for at ha' en bruger på SQL serveren med rettigheder til databasen og forbinder med :

SqlConnection Conn = new SqlConnection("Data Source=localhost\sqlexpress; UID=ditusername; PWD=ditpassword; Database=dindatabase);


/Lasse
Avatar billede arne_v Ekspert
24. oktober 2007 - 16:12 #22
Express *kan* bruge attache men *skal* ikke.
Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 14:45 #23
smid et svar
Avatar billede arne_v Ekspert
29. oktober 2007 - 14:49 #24
hvem ?
Avatar billede martinsorensen Nybegynder
29. oktober 2007 - 14:58 #25
arne v
Avatar billede arne_v Ekspert
29. oktober 2007 - 15:05 #26
ok
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