Avatar billede mirakulix Nybegynder
29. marts 2006 - 13:02 Der er 21 kommentarer

Insert med asp:formparameter ?

Hej =)
Jeg har siddet og rode med at inserte data fra en textbox i MsSQL et stykke tid og det vil bare ikke :(

Jeg får hele tiden fejlen:

"Cannot insert the value NULL into column 'Title', table 'TaskManager.dbo.Programs'; column does not allow nulls. INSERT fails.
The statement has been terminated."

jeg har forsøgt at indsætte en DefaultValue i asp:formparameter og det kommer rigtigt nok ind i DB'en, så jeg går ud fra at fejlen ligger i at jeg ikke får inputtet rigtigt fra textbox'en til asp:formparameter'en....?

Her er hvad jeg gør, håber der er en der kan spotte problemet:

.aspx filen
############################################

<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="ManagePrograms.aspx.cs" Inherits="Admin_ManagePrograms" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" Runat="Server">
    <div>
        <asp:SqlDataSource
            ID="dataSourcePrograms"
            runat="server"
            ConnectionString="<%$ ConnectionStrings:TaskManagerDBConnection%>"
            SelectCommand = "SELECT Title, Version, ProgramId  FROM Programs"
           
            insertcommand = "INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())">
                <insertparameters>
                    <asp:formparameter name="xTitle"        formfield="txtTitle" />
                    <asp:formparameter name="xVersion"      formfield="txtVersion" />
                </insertparameters>
        </asp:SqlDataSource>
   
        <table>
            <tr>
                <td style="width: 110px"><asp:Label ID="lblTitle" runat="server">Program Title:</asp:Label></td>
                <td><asp:TextBox id="txtTitle" runat="server"/></td>
                <td></td>
                <td><asp:RequiredFieldValidator id="ValidateTxtTitle" runat="server" ControlToValidate="txtTitle" Display="Dynamic" ErrorMessage="Indtast en program title."/></td>
            </tr>
            <tr>
                <td style="width: 110px"><asp:Label id="lblVersion" runat="server">Version:</asp:Label></td>
                <td><asp:TextBox id="txtVersion" runat="server"/></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td><asp:Label id="lblValidation" runat="server"/></td>
            </tr>
            <tr>
                <td colspan=2><asp:Button id="btnAddProgram" runat="server" Text="Opret Program" OnClick="btnAddProgram_Click"/></td>
            </tr>
           
        </table>
    <br />
</div>
</asp:Content>

kodefilen:
###################################################

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;

public partial class Admin_ManagePrograms : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnAddProgram_Click(object sender, EventArgs e)
    {
        dataSourcePrograms.Insert();
    }
}

PS.
Ja det er et repost, jeg har stille samme spørgsmål i kategorien MS SQL men der er ingen der har reagere og jeg skal virkelig bruget noget hjælp for at komme videre.
Avatar billede dr_chaos Nybegynder
29. marts 2006 - 18:35 #1
prøv med:
<asp:SqlDataSource
            ID="dataSourcePrograms"
            runat="server"
            ConnectionString="<%$ ConnectionStrings:TaskManagerDBConnection%>"
            SelectCommand = "SELECT Title, Version, ProgramId  FROM Programs"
         
            insertcommand = "INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())">
                <insertparameters>
                    <asp:ControlParameter name="xTitle" PropertyName="text" ControlID="txtTitle" />
                    <asp:ControlParameter name="xVersion" PropertyName="text" ControlID="txtVersion" />
                </insertparameters>
        </asp:SqlDataSource>


I stedet for din datasource
Avatar billede dr_chaos Nybegynder
29. marts 2006 - 18:37 #2
formparameter bruges normalt i forbindelse med et formview.
I normale tilfælde vil man bruger Controlparameters.
Det burde ikke være nødvendigt med PropertyName="text", men du kan prøve at teste uden.
Avatar billede mirakulix Nybegynder
30. marts 2006 - 09:28 #3
hmm samme fejl... =(
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 16:59 #4
prøv lige at sætte
<table>

til
<table Runat="Server" ID="tbl">
Avatar billede mirakulix Nybegynder
30. marts 2006 - 17:18 #5
stadig intet held, præcis samme fejl..

og jeg har forsøgt med både din og min datasource =)

Det jeg ikke forstår er at den metode jeg bruger er snuppet direkte fra:

http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.formparameter.aspx
Avatar billede dr_chaos Nybegynder
30. marts 2006 - 17:26 #6
du kan prøve at udskrive insert command:
dataSourcePrograms.InsertCommand

prøv også lige med:
insertcommand = "INSERT INTO Programs (Title, Version) VALUES (@xTitle,@xVersion)
Avatar billede mirakulix Nybegynder
31. marts 2006 - 10:05 #7
det hjælper ikke at fjerne ProgramId fra insert kommandoen, det giver samme fejl igen =(

når jeg udskriver insert command til et lable får jeg:
INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())

Er der måske en anden måde at få gemt data fra en TextBox til db'en`?
Avatar billede mirakulix Nybegynder
31. marts 2006 - 10:47 #8
hmmm jeg prøvede lige at lave en ny aspx som en seperat side, altså uden at bruge min MasterPage, kopierede alt kode inden i <div> over i den nye side og så virkede det...?

men hvorfor vil det så ikke spille sammen med mastersiden?
Avatar billede dr_chaos Nybegynder
31. marts 2006 - 10:59 #9
Ved jeg ikke burde ikke være noget problem.
prøv lige at udskrive insert command i et

<asp:SqlDataSource
            ID="dataSourcePrograms"
            runat="server" OnInserting="dataSourcePrograms_Inserting"
            ConnectionString="<%$ ConnectionStrings:TaskManagerDBConnection%>"
            SelectCommand = "SELECT Title, Version, ProgramId  FROM Programs"
       
            insertcommand = "INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())">
                <insertparameters>
                    <asp:ControlParameter name="xTitle" PropertyName="text" ControlID="txtTitle" />
                    <asp:ControlParameter name="xVersion" PropertyName="text" ControlID="txtVersion" />
                </insertparameters>
        </asp:SqlDataSource>

protected void dataSourcePrograms_Inserting(object sender,  SqlDataSourceCommandEventArgs e)
{
//udskriv e.Command.CommandText;
}
Avatar billede mirakulix Nybegynder
31. marts 2006 - 11:16 #10
INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())

igen =(

jeg har en ide om at det ikke bliver afviklet på serveren, måske på grund af noget med det masterpage der?
Avatar billede dr_chaos Nybegynder
31. marts 2006 - 11:17 #11
og hvad når du kører den på den anden side ?
Avatar billede mirakulix Nybegynder
07. april 2006 - 08:41 #12
Hai sry har været lidt travl med andre opgaver den seneste tid...

Men nu er jeg tilbage =)

Nå men,
Avatar billede mirakulix Nybegynder
07. april 2006 - 08:43 #13
ups fik trykket sen :S

... Nå men, når jeg kører den seperate aspx side som indsætter dataene korrekt i db'en er:
e.Command.CommandText = INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())

og

dataSourcePrograms.Insert() =INSERT INTO Programs (Title, Version, ProgramId) VALUES (@xTitle,@xVersion,newid())

ikke helt det man forventer vel?
Avatar billede dr_chaos Nybegynder
07. april 2006 - 08:46 #14
prøv lige at udskrive
dataSourcePrograms_Inserting
e.Command.Parameters[0].Value og e.Command.Parameters[1].Value
i
Avatar billede mirakulix Nybegynder
07. april 2006 - 11:07 #15
e.Command.Parameters[0].Value = det indtastede program navn
e.Command.Parameters[1].Value = den indtastede program version

Dette gælder med begger filer..
Avatar billede dr_chaos Nybegynder
07. april 2006 - 11:52 #16
ok så den får tingene fint med.
Men laver den stadigvæk samme fejl ?
Avatar billede mirakulix Nybegynder
15. april 2006 - 08:40 #17
ja samme fejl... :(
Avatar billede dr_chaos Nybegynder
15. april 2006 - 11:08 #18
hmm men du kan godt kører det fra en seperat side ?
Avatar billede mirakulix Nybegynder
19. april 2006 - 08:47 #19
yep
Avatar billede dr_chaos Nybegynder
19. april 2006 - 08:48 #20
kan du ikke prøve at bygge den seperate side op så den ligner den anden.
Ved at tilføje enkelte elementer adgangen.
Avatar billede dr_chaos Nybegynder
19. april 2006 - 08:49 #21
Eller fjerne elementer fra den side som ikke virker ?
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
Kurser inden for grundlæggende programmering

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