Avatar billede tanzaweb Nybegynder
16. marts 2004 - 09:52 Der er 29 kommentarer og
1 løsning

System.Data.OleDb.OleDbException: No value given for one or more

Hej Jeg får følgende fejl:

System.Data.OleDb.OleDbException: No value given for one or more required parameters.

Det er vel noget med at den ikke tager noget med over til databasen eller kan det være noget andet?

Her er koden der høre til

void UpDateCommand(object sender, System.Web.UI.WebControls.CommandEventArgs e)
    {
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    string UpdateNyhedID = e.CommandArgument.ToString();
    OurConnection = new
    OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb");
    OurCommand = new OleDbCommand ("UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + UpdateNyhederId, OurConnection);
    OurCommand.Parameters.Add("@nyhedOverskrift", OleDbType.VarChar).Value = UpdateOverskrift.Text;
    OurCommand.Parameters.Add("@nyhedTekst", OleDbType.LongVarChar).Value = UpdateTekst.Text;
    OurConnection.Open();
    OurCommand.ExecuteNonQuery();
    OurConnection.Close();
    LoadData();
    }

Den siger fejlen er i OurCommand.ExecuteNonQuery, men det er  vel  fordi der ikke er noget i overførelsen?
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:07 #1
Det er ofte fordi der er restriktioner i databasen - felter der skal være udfyldte eller tilsvarende.
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:07 #2
Har du tjekket værdien af UpdateNyhederId?
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:14 #3
nej det har jeg ikke, hvordan gør jeg så lige det
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:17 #4
Arbejder du i VS.NET?
Ellers kan du feks bruge Trace.Write( )

Husk at slå tracing til på siden ved at tilføje Trace="True" i page direktivet
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:17 #5
jeg er faktisk ikke sikker på at den er korrekt, men jeg syntes ikke det kunne være andet der skulle står der

det skal jo komme herfra:
<h3>Rediger nyheder</h3>
<table>
    <tr>
        <td><asp:datagrid ID="OurDataGrid" EnableViewState="false" BorderWidth="1" BackColor="#000000"
            CellPadding="3" CellSpacing="0" Font-Name="Arial" HeaderStyle-BackColor="#AAAAAA" ItemStyle-BackColor="#EEEEEE" runat="server" />
        </td>
        <td>
        <h4>Opdater Nyheder</h4>
        <asp:panel ID="UpdateSelect" runat="server" >
        NyhedsID: <asp:dropdownlist ID="UpdateNyhederId" DataTextField="nyhedId" DataValueField="nyhedId" runat="server" />
        <asp:button runat="server" Text="Vælg nyhed" OnClick="UpdateSetup" />
        </asp:panel>
        <asp:panel ID="UpdateTextBoxes" Visible="false" runat="server">
        Overskrift: <asp:textbox ID="UpdateOverskrift" runat="server" /><br />
        Nyheds Tekst: <asp:textbox ID="UpdateTekst" TextMode="MultiLine" Rows="10" Columns="40" runat="server" /><br />
        <asp:button ID="UpdateButton" onCommand="UpDateCommand" runat="server" Text="Opdater Nyhed" />
        <asp:button ID="CancelUpdateButton" runat="server" OnClick="UpdateReset" Text="Vælg en anden Nyhed" />
        </asp:panel><br />
        <hr style="height:1px" />
        <h4>Slet Nyhed</h4>
        NyhedsID: <asp:dropdownlist ID="DeleteNyhederId" DataTextField="nyhedId" DataValueField="nyhedId" runat="server" />
        <asp:button runat="server" Text="Slet Nyheden" OnClick="DeleteCommand" />       
        </td>
    </tr>
</table>
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:20 #6
Ok - så tror jeg, at jeg ville hente den ud med UpdateNyhederId.SelectedItem.Value i stedet
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:21 #7
asp.net C#
sorry
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:23 #8
UpdateNyhederId.SelectedItem.Value.ToSring();
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:27 #9
Det er muligt du skal tilføje
protected System.Web.UI.WebControls.DropDownList UpdateNyhederId;

i starten af din klasse også
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:27 #10
Det vil sige du vil sætte den ind således her?

SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + UpdateNyhederId.SelectedItem.Value, OurConnection);
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:33 #11
Næsten
SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + UpdateNyhederId.SelectedItem.Value.ToString(), OurConnection);
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:33 #12
jeg har sat det ind således nu

OurCommand = new OleDbCommand ("UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + UpdateNyhederId.SelectedItem.Value.ToString(), OurConnection);

og nu opdatere den tabellen, desværre overskriver den altid første række i tabellen, her skal den vel overskrive hvor nyheden er lig nyhedId som den hedder i tabellen?
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:34 #13
Og fjerne linjen:
string UpdateNyhedID = e.CommandArgument.ToString();
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:35 #14
Ja, men det hænger nok sammen med det ID det får fra dropdown kontrollen - den skal du måske lige tjekke.
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:42 #15
hvis jeg kigger i view source så kan jeg ikke se nogen id for rækken, men det skulle der vel egentlig være ikke
Den skal være i denne linje:  <asp:panel ID="UpdateTextBoxes" Visible="false" runat="server">
Hvordan kan det gøres med databinding eller ligende, eller er det et andet sted
for jeg kan se den ikke er med.
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:43 #16
Kan du vise mig den kode der fylder data i dropdown kontollen?
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:46 #17
void UpdateSetup(object Sender, EventArgs E)
    {
    UpdateSelect.Visible=false;
    UpdateTextBoxes.Visible=true;
    String SelectedID = UpdateNyhederId.SelectedItem.Value.ToString();
    UpdateButton.CommandArgument = SelectedID;
    OleDbConnection OurConnection;
    OurConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb");
    OurConnection.Open();
    OleDbCommand OurCommand;
    OleDbDataReader OurDataReader2;
    OurCommand = new OleDbCommand("SELECT * FROM nyhed WHERE nyhedId = " + SelectedID ,OurConnection);
    OurDataReader2 = OurCommand.ExecuteReader();
    OurDataReader2.Read();
    UpdateOverskrift.Visible=true;
    UpdateTekst.Visible=true;
    UpdateOverskrift.Text = OurDataReader2["nyhedOverskrift"].ToString();
    UpdateTekst.Text = OurDataReader2["nyhedTekst"].ToString();
    OurConnection.Close();
    OurDataReader2.Close();
    LoadData();
    }
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 10:48 #18
Den fylder da ikke noget i dropdown kontrollen?
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 10:58 #19
Ups det er fordi jeg har 2 her er den for deletenyheder

void DeleteCommand(object sender, System.EventArgs e)
    {
    OleDbConnection OurConnection;
    string SelectedID = DeleteNyhederId.SelectedItem.Value;
    OleDbCommand OurCommand;
    OurConnection = new
    OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb");
    OurCommand = new OleDbCommand("DELETE * FROM nyhed WHERE nyhedId = " + SelectedID, OurConnection);
    OurConnection.Open();
    OurCommand.ExecuteNonQuery();
    OurConnection.Close();
    LoadData();
    }
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 11:07 #20
Den gør da heller ikke noget ved dropdown kontrollen?
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 11:18 #21
Undskyld det var hvad der sket når man trykkede på dropdown jeg havde lagt ud, her er den som ligger noget ind i begge dropdown lister:

void LoadData()
    {
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    OleDbDataAdapter OurDataAdapter;
    DataSet OurDataSet = new DataSet();
    OurConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb");
    OurConnection.Open();
    OurCommand = new OleDbCommand ("SELECT * FROM nyhed" ,OurConnection);
    OurDataAdapter = new OleDbDataAdapter(OurCommand);
    OurDataAdapter.Fill(OurDataSet, "nyhed");
    OurDataGrid.DataSource=OurDataSet.Tables["nyhed"];
    UpdateNyhederId.DataSource=OurDataSet.Tables["nyhed"];
    DeleteNyhederId.DataSource=OurDataSet.Tables["nyhed"];
    DataBind();
    }
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 11:26 #22
OK. Jeg plejer at sætte datavalue og datatext i den forbindelse:

UpdateNyhederId.DataTextField = "nyhedId"
UpdateNyhederId.DataValueField = "nyhedId" (Viser du id begge steder?)

Så kunne du evt. prøve UpdateNyhederId.SelectedItem.Text.ToString() i stedet
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 11:37 #23
hvor vil du helt exakt sætte dem ind imellem ourdategrid og updatenyhederid eller nede i <h4>Opdater Nyheder</h4>
        <asp:panel ID="UpdateSelect" runat="server" >
        NyhedsID: <asp:dropdownlist ID="UpdateNyhederId" DataTextField="nyhedId" DataValueField="nyhedId" runat="server" />
        <asp:button runat="server" Text="Vælg nyhed" OnClick="UpdateSetup" />
        </asp:panel>
        <asp:panel ID="UpdateTextBoxes" Visible="false" runat="server">
        Overskrift: <asp:textbox ID="UpdateOverskrift" runat="server" /><br />
        Nyheds Tekst: <asp:textbox ID="UpdateTekst" TextMode="MultiLine" Rows="10" Columns="40" runat="server" /><br />
        <asp:button ID="UpdateButton" onCommand="UpDateCommand" runat="server" Text="Opdater Nyhed" />
        <asp:button ID="CancelUpdateButton" runat="server" OnClick="UpdateReset" Text="Vælg en anden Nyhed" />
        </asp:panel><br />


???????????
jeg er ved at rende træt
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 11:39 #24
udskyld men vi har haft 8 dage med asp.net og har fået til opgave at lave en e-handel på 14 dage, til en prøve, og så er serveren hvor den skal ligge ikke oppe at køre endnu så vi kan ikke engang arbejde allesammen endnu, men kun på vores lokale maskiner og bærebare. så vi er lidt stressede
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 12:28 #25
Fint nok.
Prøv at kigge på, hvor tit du fylder data i din dropdownkontrol - gør du det ved hvert page-load eller kun når siden bliver vist første gang?
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 12:38 #26
Det gør jeg hvis der ike er en psotback

void Page_Load()
    {
        if(!IsPostBack)
        {
        LoadData();
        }
    }
Men jeg har prøvet at indsætte:
UpdateNyhederId.DataTextField = "nyhedId"
UpdateNyhederId.DataValueField = "nyhedId"
i
void LoadData()
    {
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    OleDbDataAdapter OurDataAdapter;
    DataSet OurDataSet = new DataSet();
    OurConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb");
    OurConnection.Open();
    OurCommand = new OleDbCommand ("SELECT * FROM nyhed" ,OurConnection);
    OurDataAdapter = new OleDbDataAdapter(OurCommand);
    OurDataAdapter.Fill(OurDataSet, "nyhed");
    OurDataGrid.DataSource=OurDataSet.Tables["nyhed"];
    UpdateNyhederId.DataTextField = "nyhedId";
    UpdateNyhederId.DataValueField = "nyhedId";
    UpdateNyhederId.DataSource=OurDataSet.Tables["nyhed"];
    DeleteNyhederId.DataSource=OurDataSet.Tables["nyhed"];
    DataBind();
    }

Men den sætter den stadig bare ind i den første række, jeg burde vel egetnlig også sende nyhedId med over men jeg kan ikke se om jeg gørre det
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 12:42 #27
Det er jo i denne der skal opdater nyheder men jeg syntes der mangler noget (ID):

<asp:panel ID="UpdateTextBoxes" Visible="false" runat="server">
        Overskrift: <asp:textbox ID="UpdateOverskrift" runat="server" /><br />
        Nyheds Tekst: <asp:textbox ID="UpdateTekst" TextMode="MultiLine" Rows="10" Columns="40" runat="server" /><br />
        <asp:button ID="UpdateButton" onCommand="UpDateCommand" runat="server" Text="Opdater Nyhed" />
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 13:27 #28
Arne V send et svar for pointen.

Den anden fejl har jeg fundet og løsningen på det ser således ud:

void UpDateCommand(object sender, System.Web.UI.WebControls.CommandEventArgs e)
    {
    OleDbConnection OurConnection;
    OleDbCommand OurCommand;
    string nyhedId = e.CommandArgument.ToString();
    OurConnection = new
    OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Inetpub\wwwroot\eHandel\abcd.mdb");
    OurCommand = new OleDbCommand ("UPDATE nyhed SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + nyhedId, OurConnection);
    OurCommand.Parameters.Add("@nyhedOverskrift", OleDbType.VarChar).Value = UpdateOverskrift.Text;
    OurCommand.Parameters.Add("@nyhedTekst", OleDbType.LongVarChar).Value = UpdateTekst.Text;
    OurConnection.Open();
    OurCommand.ExecuteNonQuery();
    OurConnection.Close();
    LoadData();
    }

string nyhedId = e.CommandArgument.ToString(); hed før string UpNyhederID og det var en fejl og så har jeg rettet UpdateNyhederId.SelectedItem.Value.ToString(); til bare nyhedId
Avatar billede thor.ostergaard Nybegynder
16. marts 2004 - 13:41 #29
Svar - selv om jeg ikke hedder Arne V
Avatar billede tanzaweb Nybegynder
16. marts 2004 - 14:32 #30
undskyld jeg har været lidt stresset men kan slappe lidt af nu.

TAK
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