Avatar billede sneakraid Nybegynder
16. februar 2006 - 21:08 Der er 19 kommentarer og
1 løsning

udtræk fra mssql

Hej experter :)

Jeg sidder med en text editor og vil rette nogle sider på et site. Dertil skal jeg lave et udtræk fra en mssql database, hvor indholdet af siderne er i. Men editoren kræver en variabel med indholdet fra databasen, for at kunne vise indholdet, det er jo logisk nok. Men hvordan laver jeg udtrækket og smider det i en variabel, som jeg så kan tilføre editoren?
Avatar billede pfp Nybegynder
16. februar 2006 - 23:03 #1
Nedenstående er ikke testet, men det er ca. sådan noget du skal ud i.

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

string dinVariabel;

try
{
IDataReader reader;
SqlConnection conn = new SqlConnection("Server=db.host.dk; Database=dindb;");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;

cmd.CommandText = "SELECT * FROM Pages WHERE PageId = 1";
reader = cmd.ExecuteReader();

while(reader.Read())
{
  dinVariabel = reader["DitTekstFelt"].ToString();
}

}
catch(SqlException)
{
throw;
}
finally
{
  conn.Dispose();
  reader.Dispose();
}
Avatar billede sneakraid Nybegynder
17. februar 2006 - 11:27 #2
Hvis jeg har en SqlConnection string i forvejen, som f.eks. hedder 'KlubConnectionString', hvordan bruger jeg den sammen
med din kode så?
Avatar billede pfp Nybegynder
17. februar 2006 - 12:33 #3
SqlConnection conn = new SqlConnection(KlubConnectionString);
Avatar billede sneakraid Nybegynder
26. februar 2006 - 15:06 #4
Nu har jeg endelig haft tid til at rode med det igen :)

Men jeg prøvede det du skrev ovenfor, men jeg får denne fejl:

"The name 'conn' does not exist in the current context"

Hvad vil det sige? Og hvordan kan jeg rette det?
Avatar billede pfp Nybegynder
26. februar 2006 - 16:32 #5
Enten har du kaldt forbindelsen noget andet, ellers også forsøger du at tilgå den uden for variablens scope.

Du er nød til at poste din kode, hvis jeg skal kunne finde fejlen.
Avatar billede sneakraid Nybegynder
26. februar 2006 - 16:46 #6
Ja, du siger noget, for først fik jeg også en fejl med at der ikke eksisterede den connection string. Men den eksisterer altså, fordi jeg har brugt den et andet sted.

Men min codebehind ser således ud:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class admin_PageEdit : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            IDataReader reader;
            SqlConnection conn = new SqlConnection("Server=.\\SQLEXPRESS;Database=BogKlub;Trusted_Connection=False");
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;

            cmd.CommandText = "SELECT * FROM Pages WHERE PageId = 1";
            reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                Label1.Text = reader["PageTxt"].ToString();
            }

        }
        catch (SqlException)
        {
            throw;
        }
        finally
        {
            conn.Dispose();
            reader.Dispose();
        }
    }
}
Avatar billede pfp Nybegynder
26. februar 2006 - 17:43 #7
SqlConnection conn skal erklæres uden for try/catch

Så prøve lige at flytte nedenstående ud i void Page_Load
SqlConnection conn = new SqlConnection("Server=.\\SQLEXPRESS;Database=BogKlub;Trusted_Connection=False");
Avatar billede sneakraid Nybegynder
26. februar 2006 - 19:19 #8
Der skete i hvert fald et eller andet nu. Men det ser ud som om jeg os skal have min reader undenfor try/catch, eller hvad? For der kommer denne fejl:

The name 'reader' does not exist in the current context
Avatar billede pfp Nybegynder
26. februar 2006 - 19:34 #9
Ja det er samme problemstilling. Problemet opstår når du du prøver at lukke conn og reader i finally. Medmindre de er erklæret helt uden for try/catch kan du ikke tilgå dem der.
Avatar billede sneakraid Nybegynder
26. februar 2006 - 20:36 #10
Nu har jeg prøvet at flytte reader udenfor try/catch, men den melder stadig fejl. Jeg er lidt usikker på om det er sådan her det skal se ud:

public partial class admin_PageEdit : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        IDataReader reader;
        SqlConnection conn = new SqlConnection("Server=.\\SQLEXPRESS;Database=BogKlub;Trusted_Connection=False");
        try
        {
     
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;

            cmd.CommandText = "SELECT * FROM Pages WHERE PageId = 1";
            reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                Label1.Text = reader["PageTxt"].ToString();
            }

        }
        catch (SqlException)
        {
            throw;
        }
        finally
        {
            conn.Dispose();
            reader.Dispose();
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = oEdit1.Content;
    }
}
Avatar billede pfp Nybegynder
26. februar 2006 - 21:04 #11
Du skal måske erklære IDataReader som null:
IDataReader reader = null;

Ellers ser det meget rigtigt ud. Hvad får du af fejl?
Avatar billede sneakraid Nybegynder
26. februar 2006 - 21:18 #12
Jeg har nu prøvet at sætte IDataReader reader = null;
men jeg får nu også en ny fejl:

Object reference not set to an instance of an object.
Avatar billede pfp Nybegynder
26. februar 2006 - 23:14 #13
Du hjælper mig jo ikke ligefrem her :) Jeg kan jo ikke gætte hvilket objekt din debugger "snakker om"
Avatar billede pfp Nybegynder
26. februar 2006 - 23:15 #14
Så du må være lidt mere specifik
Avatar billede sneakraid Nybegynder
27. februar 2006 - 11:13 #15
Hehe sorry, her kommer hvad den skriver af fejl. Og det er linie 41 som er markeret med rød, så går ud fra det er den som der opstår en fejl ved :/

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 39:        {
Line 40:            conn.Dispose();
Line 41:            reader.Dispose();
Line 42:        }
Line 43:    }
Avatar billede pfp Nybegynder
27. februar 2006 - 11:46 #16
Erstat linie 41 med:

if(reader != null)
{
  reader.Close();
}
Avatar billede sneakraid Nybegynder
27. februar 2006 - 13:17 #17
Jeg synes det bliver mere og mere underligt med den connection her. Forstår ik hvad der sker, for nu har jeg erstattet linie 41 med det du skrev, og jeg får en ny fejl:

Exception Details: System.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is closed.

Source Error:


Line 24:
Line 25:            cmd.CommandText = "SELECT * FROM Pages WHERE PageId = 1";
Line 26:            reader = cmd.ExecuteReader();
Line 27:
Line 28:            while (reader.Read())

Min kode som den er lige nu ser sådan her ud:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class admin_PageEdit : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        IDataReader reader = null;
        SqlConnection conn = new SqlConnection("Server=.\\SQLEXPRESS;Database=BogKlub;Trusted_Connection=False");
        try
        {
     
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;

            cmd.CommandText = "SELECT * FROM Pages WHERE PageId = 1";
            reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                Label1.Text = reader["PageTxt"].ToString();
            }

        }
        catch (SqlException)
        {
            throw;
        }
        finally
        {
            conn.Dispose();
            if (reader != null)
            {
                reader.Close();
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = oEdit1.Content;
    }
}
Avatar billede pfp Nybegynder
27. februar 2006 - 13:28 #18
Som fejlmeddelsen ret specifikt antyder så mangler forbindelsen at blive åbnet.
Det gør du ved at skrive: conn.Open(); inde i din try blok.

Den kode jeg oprindelig skrev til dig var som sagt ikke aftestet, da jeg bare skrev den direkte i svar feltet her på siden. Men fejlmeddelserne fortæller altså en del..
Avatar billede sneakraid Nybegynder
27. februar 2006 - 13:48 #19
oh sorry. Ja det kan jeg godt se, jeg tænkte mig bare ik lige om :/
Men det virker faktisk nu :)

Så MANGE tak for hjælpen og din tid!

Smid et svar og du skal få dine point :) hehe
Avatar billede pfp Nybegynder
27. februar 2006 - 14:03 #20
Det var så lidt. Godt du fik det på plads.
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