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?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
16. marts 2004 - 10:07
#1
Det er ofte fordi der er restriktioner i databasen - felter der skal være udfyldte eller tilsvarende.
16. marts 2004 - 10:07
#2
Har du tjekket værdien af UpdateNyhederId?
16. marts 2004 - 10:14
#3
nej det har jeg ikke, hvordan gør jeg så lige det
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
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>
16. marts 2004 - 10:20
#6
Ok - så tror jeg, at jeg ville hente den ud med UpdateNyhederId.SelectedItem.Value i stedet
16. marts 2004 - 10:21
#7
asp.net C# sorry
16. marts 2004 - 10:23
#8
UpdateNyhederId.SelectedItem.Value.ToSring();
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å
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);
16. marts 2004 - 10:33
#11
Næsten SET nyhedOverskrift = @nyhedOverskrift, nyhedTekst = @nyhedTekst WHERE nyhedId = " + UpdateNyhederId.SelectedItem.Value.ToString(), OurConnection);
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?
16. marts 2004 - 10:34
#13
Og fjerne linjen: string UpdateNyhedID = e.CommandArgument.ToString();
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.
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.
16. marts 2004 - 10:43
#16
Kan du vise mig den kode der fylder data i dropdown kontollen?
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(); }
16. marts 2004 - 10:48
#18
Den fylder da ikke noget i dropdown kontrollen?
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(); }
16. marts 2004 - 11:07
#20
Den gør da heller ikke noget ved dropdown kontrollen?
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(); }
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
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
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
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?
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
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" />
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
16. marts 2004 - 13:41
#29
Svar - selv om jeg ikke hedder Arne V
16. marts 2004 - 14:32
#30
undskyld jeg har været lidt stresset men kan slappe lidt af nu. TAK
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.