Avatar billede torbenmelander Nybegynder
15. marts 2002 - 10:58 Der er 12 kommentarer og
2 løsninger

Hvorfor virker dette ikke ???

Jeg har problem med at oprette en post hvis der ikke står noget i feltet SMSNummer ... Jeg har fundet ud af at problemet opstår pga. af feltes type (BigInt) ... da det virker fint hvis jeg laver det på felt af type NVarChar ...

Her er koden:

<%@ Page Trace="True"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<html>
<script language="VB" runat="server">

    Dim MyConnection As SqlConnection

    Sub Page_Load(Sender As Object, E As EventArgs)

        MyConnection = New SqlConnection("server=localhost;uid=skpsql;pwd=;database=skp-ticket;")

        If Not (IsPostBack)
            BindGrid()
        End If
    End Sub


    Sub Opret_Click(Sender As Object, E As EventArgs)
        Message.InnerHtml = ""

        If (Page.IsValid)

            Dim DS As DataSet
            Dim MyCommand As SqlCommand

            Dim InsertCmd As String = "INSERT INTO tblBruger (BrugerID, Navn, Password, Rettigheder, SMSNummer) VALUES (@BrugerId, @Navn, @Password, @Rettigheder, @SMSNummer)"

            MyCommand = New SqlCommand(InsertCmd, MyConnection)

            MyCommand.Parameters.Add(New SqlParameter("@BrugerID", SqlDbType.NVarChar, 50))
            MyCommand.Parameters("@BrugerID").Value = fldBrugerID.Value

            MyCommand.Parameters.Add(New SqlParameter("@Navn", SqlDbType.NVarChar, 50))
            MyCommand.Parameters("@Navn").Value = fldNavn.Value

            MyCommand.Parameters.Add(New SqlParameter("@Password", SqlDbType.NVarChar, 50))
            MyCommand.Parameters("@Password").Value = fldPassword.Value

            MyCommand.Parameters.Add(New SqlParameter("@Rettigheder", SqlDbType.Int, 4))
            MyCommand.Parameters("@Rettigheder").Value = fldRettigheder.Value

            MyCommand.Parameters.Add(New SqlParameter("@SMSNummer", SqlDbType.BigInt, 8))
            MyCommand.Parameters("@SMSNummer").Value = fldSMSNummer.Value

            MyCommand.Connection.Open()

            Try
                MyCommand.ExecuteNonQuery()
                Message.InnerHtml = "<b>Record Added</b><br>" & InsertCmd.ToString()
            Catch Exp As SQLException
                If Exp.Number = 2627
                    Message.InnerHtml = "ERROR: A record already exists with the same primary key"
                Else
                    Message.InnerHtml = "ERROR: Could not add record, please ensure the fields are correctly filled out"
                End If
                Message.Style("color") = "red"
            End Try

            MyCommand.Connection.Close()

        End If

        BindGrid()
    End Sub

    Sub BindGrid()

        Dim DS As DataSet
        Dim MyCommand As SqlDataAdapter
        MyCommand = new SqlDataAdapter("SELECT * FROM tblBruger", MyConnection)

        DS = new DataSet()
        MyCommand.Fill(DS, "tblBruger")

        MyDataGrid.DataSource=DS.Tables("tblBruger").DefaultView
        MyDataGrid.DataBind()
    End Sub

</script>

<body style="font: 10pt verdana">

  <form runat="server">

    <h3><font face="Verdana">Inserting a Row of Data w/ Validation</font></h3>

    <table width="95%">
      <tr>
        <td valign="top">

          <ASP:DataGrid id="MyDataGrid" runat="server"
            Width="700"
            BackColor="#ccccff"
            BorderColor="black"
            ShowFooter="false"
            CellPadding=3
            CellSpacing="0"
            Font-Name="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#aaaadd"
            EnableViewState="false"
          />

        </td>
        <td valign="top">

          <table style="font: 8pt verdana">
            <tr>
              <td colspan="2" bgcolor="#aaaadd" style="font:10pt verdana">Opret bruger:</td>
            </tr>
            <tr>
              <td nowrap>Bruger nr.: </td>
              <td>
                <input type="text" id="fldBrugerID" value="" runat="server">
                <asp:RequiredFieldValidator id="fldBrugerIDReqVal"
                    ControlToValidate="fldBrugerID"
                    Display="Dynamic"
                    Font-Name="Verdana" Font-Size="12"
                    runat=server>
                        &nbsp;*
                </asp:RequiredFieldValidator>
              </td>
            </tr>
            <tr>
              <td nowrap>Navn: </td>
              <td>
                <input type="text" id="fldNavn" value="" runat="server">
                <asp:RequiredFieldValidator id="fldNavnReqVal"
                    ControlToValidate="fldNavn"
                    Display="Dynamic"
                    Font-Name="Verdana" Font-Size="12"
                    runat=server>
                        &nbsp;*
                </asp:RequiredFieldValidator>
              </td>
            </tr>
            <tr>
              <td nowrap>Password: </td>
              <td>
                <input type="text" id="fldPassword" value="" runat="server">
                <asp:RequiredFieldValidator id="fldPasswordReqVal"
                    ControlToValidate="fldPassword"
                    Display="Dynamic"
                    Font-Name="Verdana" Font-Size="12"
                    runat=server>
                        &nbsp;*
                </asp:RequiredFieldValidator>
              </td>
            </tr>
            <tr>
              <td>Rettigheder: </td>
              <td><nobr>
                <input type="text" id="fldRettigheder" value="" runat="server">
                <asp:RequiredFieldValidator id="fldRettighederReqVal"
                    ControlToValidate="fldRettigheder"
                    Display="Dynamic"
                    Font-Name="Verdana" Font-Size="12"
                    runat=server>
                        &nbsp;*
                </asp:RequiredFieldValidator>
              </td>
            </tr>
            <tr>
              <td>SMS nr.: </td>
              <td><input type="text" id="fldSMSNummer" value="" runat="server"></td>
            </tr>
            <tr>
              <td></td>
              <td style="padding-top:15">
                <input type="submit" OnServerClick="Opret_Click" value="Opret bruger" runat="server">
              </td>
            </tr>
            <tr>
              <td colspan="2" style="padding-top:15" align="center">
                <span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>

  </form>

</body>
</html>

Håber I kan hjælpe :-)
Avatar billede nute Nybegynder
15. marts 2002 - 11:05 #1
hvorfor benytter du

<input type="text" id="fldSMSNummer" value="" runat="server">

istedenfor de innebyggede controllene

<asp:TextBox/>

??

Men kan det være fprdi du ikke tillater null verdi ? prøv å sett verdien til 0 eller -1 hvis det ikke er noen verdi i SMSnummer...

/nutehvorfor benytter du

<input type="text" id="fldSMSNummer" value="" runat="server">

istedenfor de innebyggede controllene

<asp:TextBox/>

??

Men kan det være fprdi du ikke tillater null verdi ? prøv å sett verdien til 0 eller -1 hvis det ikke er noen verdi i SMSnummer...

/nute
Avatar billede torbenmelander Nybegynder
15. marts 2002 - 11:32 #2
Der er ikke nogen egentlig grund til at jeg bruger HTML istedet for de nye indbyggede controllere ... andet end at det er noget kode noget kode jeg har tilpasset fra www.dotnetjunkies.com ...

Jeg har selv tænkt på at sætte værdien lig med 0, men bør vel ikke være nødvendigt ...

Hvis feltet er af typen NVarChar i databasen og der er kryds i Allow Nulls behøver man lave noget ekstra kode ...
Avatar billede nute Nybegynder
15. marts 2002 - 11:53 #3
<snip>
Jeg har selv tænkt på at sætte værdien lig med 0, men bør vel ikke være nødvendigt
</snip>

men det skader ikke å prøve ;)
Avatar billede torbenmelander Nybegynder
15. marts 2002 - 12:03 #4
Jeg har prøvet det ... inden jeg oprettede spørgsmålet ... og ja det virkede ... men skulle det være nødvendigt ???
Avatar billede nute Nybegynder
15. marts 2002 - 12:12 #5
tydeligvis...altenativt skal du spesifikt angi at du setter null inn i kolonnen
Avatar billede hirayz Nybegynder
15. marts 2002 - 12:52 #6
torben, torben gi mig point
Avatar billede torbenmelander Nybegynder
15. marts 2002 - 14:34 #7
Nute >> tydeligvis...altenativt skal du spesifikt angi at du setter null inn i kolonnen

Hvad mener du med dette ?

Jeg har løst problemet ved at erstatte denne linie:

MyCommand.Parameters("@SMSNummer").Value = fldSMSNummer.Value

med denne:

            If fldSMSNummer.Value = "" Then
              MyCommand.Parameters("@SMSNummer").Value = 0
            Else
              MyCommand.Parameters("@SMSNummer").Value = fldSMSNummer.Value
            End if

Vil du have point :-)

Hirayz >> Drop det lort ...
Avatar billede nute Nybegynder
15. marts 2002 - 14:36 #8
det jeg mente, var at istedenfor å sette inn 0 eller -1, så skulle du sette inn null :-) på samme måte som du har gjort...

            If fldSMSNummer.Value = "" Then
              MyCommand.Parameters("@SMSNummer").Value = Null
            Else
              MyCommand.Parameters("@SMSNummer").Value = fldSMSNummer.Value
            End if
Avatar billede torbenmelander Nybegynder
15. marts 2002 - 14:56 #9
nute >> Der er ikke noget der hedder Null i VB.NET så vidt jeg ved ...
Avatar billede nute Nybegynder
15. marts 2002 - 14:58 #10
naaa...true :-)

jeg leker med C#, så jeg glemmer noenganger de små underfundighetene i VB...

Nothing kan man kanskje bruke, så¨...
Avatar billede reffak Nybegynder
15. marts 2002 - 18:08 #11
Noget helt andet:
Hvorfor vil du gemme som BigInt istedet for nvarchar? Jeg kan ikke se nogen grunde imod nvarchar, mens følgende problemer kan opstå med BigInt:
-Folk taster mellemrum mellem cifrene : 12 34 56 78
-Folk taster landekoder : +45 12 34 56 78

Efter min mening skal man kun bruge numeriske værdier hvis:
-Man kunne have interesse i at anvende en aggregat funktion, f.eks. SUM el. AVG
-Man kunne have interesse i at anvende nummeret som ID (men her bruger du BrugerID).

Men der er måske en anden grund dit valg?

MVH
Avatar billede torbenmelander Nybegynder
16. marts 2002 - 16:58 #12
reffak >> Det kan du egentlig ha' ret i ... Det er ikke mig der har lavet tabellen så jeg har ikke tænkt over hvorfor ham der har lavet den har brugt BigInt ... men det er der selvfølgelig ingen grundt til ... tværtimod ... Tak fordi du åbnede min øjne ;-)

nute >> Tak for hjælpen til dig også :-)

reffak og nute >> Håber I er tilfredse med at dele pointne ...
Avatar billede reffak Nybegynder
16. marts 2002 - 18:28 #13
Glad for at kunne hjælpe :-).

Helt klart det bedste at dete points, efter min mening :-)

MVH
Avatar billede nute Nybegynder
16. marts 2002 - 18:49 #14
det er også iorden for meg. Reffak kom egentlig med en opplysning som er rimelig basal, så det var noe jeg "glemte" å påpeke. Jeg tenkte å kommentere det, men jeg regnet med at det ikke var nødvendig. Men jeg kan da se at det kanskje var nødvendig :-)

/nute
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