Avatar billede tanzaweb Nybegynder
13. marts 2004 - 22:31 Der er 39 kommentarer og
1 løsning

Problemer med Update i access database, får fejl i C# script

Hej jeg har prøvet at følge en vedledning i at lave en update men får denne fejl.

The type or namespace name 'strSQL' could not be found (are you missing a using directive or an assembly reference?) i:

strSQL updateCmd = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];

Se hele koden her:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1" debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<% string title; title = "Indsæt nyheder"; %>
<script runat="server">

    void Page_Load(object Sender, EventArgs E)
    {
    string strConnection;
            string strSQL;
            OleDbConnection objConnection;
            OleDbCommand objCommand;
            strConnection =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb";
            objConnection = new OleDbConnection(strConnection);
            objConnection.Open();
            strSQL = "SELECT * FROM nyhed WHERE nyhedId = " + Request.QueryString["ID"];
            objCommand = new OleDbCommand(strSQL, objConnection);
            dgData.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
            dgData.DataBind();
           
            objConnection.Close();

    }
    void update(object Sender, EventArgs e){
   
    string strConnection, strSQL;
            OleDbConnection objConnection;
            OleDbCommand objCommand;
            strConnection =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb";
            objConnection = new OleDbConnection(strConnection);
            objConnection.Open();
            strSQL updateCmd = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];
            SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);
            myCommand.Parameters.Add(new SqlParameter("@nyhedOverskrift", SqlDbType.NVarChar, 11));
            myCommand.Parameters.Add(new SqlParameter("@nyhedTekst", SqlDbType.NVarChar, 11));
            objCommand = new OleDbCommand(strSQL, objConnection);
            dgData.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
            dgData.DataBind();
           
            objConnection.Close();

    }
        public void dgData_Edit(object sender, EventArgs e)
    {
        dgData.EditItemIndex = (int)e.Item.ItemIndex;
        Databind();
    }

    public void dgData_Cancel(object sender, EventArgs e)
    {
        dgData.EditItemIndex = -1;
        Databind();
    }


</script>


<form runat="server">

<h3>Rediger nyheder</h3>
<asp:datagrid id="dgData" runat="server" OnEditCommand="update" OnCancelCommand="dgData_Cancel" OnUpdateCommand="dgData_Update" DataKeyField="nyhedId">

  <Columns>
    <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" />
  </Columns>

</ASP:DataGrid>

</form>

Håber der er en der kan hjælpe?
Avatar billede arne_v Ekspert
13. marts 2004 - 22:39 #1
Mener du ikke:

string updateCmd = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];

?
Avatar billede repsak Nybegynder
13. marts 2004 - 22:40 #2
strSQL updateCmd = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];

strSQL referer til en type som du ikke har importeret
updateCmd er et var navn

mener du mon ikke
string strSQL = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];
Avatar billede arne_v Ekspert
13. marts 2004 - 22:40 #3
eller bare:

strSQL = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];

og så bruge strSQL bagefter
Avatar billede repsak Nybegynder
13. marts 2004 - 22:40 #4
hehehe turbo Arne ;-)
Avatar billede arne_v Ekspert
13. marts 2004 - 22:52 #5
:-)
Avatar billede arne_v Ekspert
13. marts 2004 - 22:52 #6
Og et svar
Avatar billede tanzaweb Nybegynder
13. marts 2004 - 22:58 #7
Efter at have lavet den ændring: string strSQL = "UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + Request.QueryString["ID"];
laver den nu fejl i: SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);

The type or namespace name 'SqlCommand' could not be found (are you missing a using directive or an assembly reference?)

???????
Avatar billede arne_v Ekspert
13. marts 2004 - 23:00 #8
Ja fordi der referer du stadigvæk til updateCmd variablen
Avatar billede arne_v Ekspert
13. marts 2004 - 23:00 #9
Det var derfor mit første forslag var som det var
Avatar billede tanzaweb Nybegynder
13. marts 2004 - 23:22 #10
den siger stadigvæk The type or namespace name 'SqlCommand' could not be found (are you missing a using directive or an assembly reference?)

selv hvis jeg har ændret alle strSQL til updateCmd eller omvendt. og jeg syntes ikke lige jeg kan se hvorfor
Avatar billede arne_v Ekspert
13. marts 2004 - 23:24 #11
Den SqlCommand skal vel også være en OleDbCommand ?
Avatar billede arne_v Ekspert
13. marts 2004 - 23:25 #12
(det er da ihvertfald en OleDbConnection og ikke en SqlConnection du har)
Avatar billede tanzaweb Nybegynder
13. marts 2004 - 23:52 #13
Hvad så når den skrive dette nu:
e type or namespace name 'SqlParameter' could not be found (are you missing a using directive or an assembly reference?)

Jeg er ny til asp.net, og alt dette er vant til PHP så det kræver lidt tilvænning da jeg syntes det er meget sværre i ASP.NET så jeg nok lidt mere hjælp en normalt eller?

Jeg har ændret følgende:

            objCommand = new OleDbCommand(updateCmd, objConnection);
            myCommand.Parameters.Add(new SqlParameter("@nyhedOverskrift", SqlDbType.NVarChar, 11));
            myCommand.Parameters.Add(new SqlParameter("@nyhedTekst", SqlDbType.NVarChar, 11));

            dgData.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
            dgData.DataBind();

Har fjernet en linje da jeg opdagede jeg havde næste 2 ens.
Avatar billede tanzaweb Nybegynder
13. marts 2004 - 23:53 #14
det skal også være en OleDbparameter eller ligende
Avatar billede arne_v Ekspert
13. marts 2004 - 23:55 #15
Ja.
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 00:17 #16
objCommand.Parameters.Add(new OleDbparameter("@nyhedOverskrift", SqlDbType.VarChar, 11));
virker heller ikke

The type or namespace name 'OleDbparameter' could not be found (are you missing a using directive or an assembly reference?)
Avatar billede arne_v Ekspert
14. marts 2004 - 00:28 #17
Prøv med OleDbParameter (stort P)
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 00:57 #18
nu har samme linje som invalid arguments

The best overloaded method match for 'System.Data.OleDb.OleDbParameter.OleDbParameter(string, System.Data.OleDb.OleDbType, int)' has some invalid arguments

er det nødvendigt at have SqlDbType.VarChar, 255 på? og ved du hvad 255 skal stå for. jeg regner med det er antallet af karaktere i db feltet, eller er det noget andet? varChar er vel felttypen?
Avatar billede arne_v Ekspert
14. marts 2004 - 11:47 #19
new OleDbparameter("@nyhedOverskrift", OleDbType.VarChar)

eller

new OleDbparameter("@nyhedOverskrift", OleDbType.VarChar, 255)
Avatar billede arne_v Ekspert
14. marts 2004 - 11:47 #20
Ja - de 255 er en max. længde.
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 13:33 #21
når feltet i tabelen er tekst skal den så være varchar eller noget andet
Avatar billede arne_v Ekspert
14. marts 2004 - 13:35 #22
VARCHAR er tekst.
Avatar billede repsak Nybegynder
14. marts 2004 - 13:35 #23
varchar er fint (hvis datamængden ikke overstiger 255 tegn)
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 13:39 #24
hvis det er memo som det siger i access tabelen er det så memo her, ved du hvor man kan finde ud af hvad alle felterne skal hedde i scriptet
Avatar billede arne_v Ekspert
14. marts 2004 - 13:41 #25
Slå OleDbType op i docs og se mulighederne.
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 13:44 #26
får nu denne fejl: 'System.EventArgs' does not contain a definition for 'Item'

i: dgData.EditItemIndex = (int)e.Item.ItemIndex;
Avatar billede arne_v Ekspert
14. marts 2004 - 14:04 #27
EventArgs har tilsyneladende ikke en property Item ...
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 14:26 #28
hvor kan man sætte det er det i web.config eller i scriptet det skal være?
Avatar billede arne_v Ekspert
14. marts 2004 - 14:28 #29
Det kan du ikke sætte nogen steder. Sådan har Microsoft kodet den klasse.
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 14:38 #30
okay hvad gør jeg så ?????
Avatar billede arne_v Ekspert
14. marts 2004 - 14:41 #31
Skriver den del af koden om.

Måske er det noget andet i e som du kan bruge ?
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 19:22 #32
jeg får nu denne fejl

stem.Web.UI.WebControls.Panel' does not contain a definition for 'DataSource'

i denne linje:

dgData.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);

Jeg bruger dog den i andre samen hæng og har ingen fejl der så hvad kan være problemmet.
Avatar billede arne_v Ekspert
14. marts 2004 - 19:26 #33
dgData må have en anden type end System.Web.UI.WebControls.Panel i de sammenhænge
hvor det virker.

Når jeg slår op i docs så har den klasse ikke en DataSource.
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 19:44 #34
jeg bruger den på andre sider for at få vist en nyhedsliste og her er der ingen problemer

Er der nogen der kunne have en forklaring på dette?
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 20:03 #36
jeg sider med en ASP.NET for webdesigners bog hvor den bruges overalt i bogen og det er derfra jeg har taget koderne til de andre sider.

Jeg har stadig ikke helt forstået opbygningen af .net men den virker som kompliceret. og jeg syntes der er kun få forklaringer på hvad de forskellige ting betyder.
Nu har jeg læst mange PHP bøger og de er meget mere beskrivende en de .Net bøger jeg har set indtil nu.
Håber jeg finder en løsning
Avatar billede arne_v Ekspert
14. marts 2004 - 20:26 #38
Korrekt.

Men System.Windows.Forms.DataGrid og System.Web.UI.WebControls.Panel er 2 helt
forskellige klasser.

Og compileren hævder altså at din dgData er en System.Web.UI.WebControls.Panel !
Avatar billede repsak Nybegynder
14. marts 2004 - 21:11 #39
lad os roligt antage at compileren har ret, så derfor må du sikre dig hvilken type dine objekter har :-)
Avatar billede tanzaweb Nybegynder
14. marts 2004 - 21:58 #40
hvordan eller hvor gør jeg så lige det?
Jeg er ved at være noget træt i hovedet hvis jeg har et tilbage. Undskyld
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