Just nu i M3-nätverket
Jump to content

Spara ett värde i en sql-databas


Tigers21

Recommended Posts

Jag ska spara ett värde från en textbox till en sql server-databas...

 

Jag får dock detta felet när jag kör min kod:

" Cannot insert the value NULL into column 'id' "

 

Vad gör jag för fel?

 

 

Hela koden kommer här:

 

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.sqlclient" %>
<script runat="server">

   Sub Spara(ByVal obj As Object, ByVal e As EventArgs)

       Dim ConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Databas1.mdf;Integrated Security=True;User Instance=True"

       Dim strSQL As String = "INSERT INTO Tabell2 ( Fornamn ) VALUES ( @Namn ) "

       Dim Conn As New SqlConnection(ConnectionString)
       Dim Command As New SqlCommand("", Conn)

       Command.CommandText = strSQL

       Dim Namn As New SqlParameter("@Namn", DbType.String)
       Namn.Value = TextBox1.Text
       Command.Parameters.Add(Namn)


       Conn.Open()
       Command.ExecuteNonQuery()
       Conn.Close()    

   End Sub

</script>



<html>
<head>
</head>
<body>
<form runat="server">

Namn:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Button ID="Button1" OnClick="Spara" runat="server" Text="Skicka" />

</form>    
</body>
</html>

 

Link to comment
Share on other sites

Okej...Tack för ditt svar!

Nu är det så att jag är "nybörjare" så jag förstår inte precis det du skrev...

 

Det jag försöker göra är att jag har en kod som fungerar med access-databas...Nu har jag bytt till en sql-server-databas och vet inte riktigt vad jag ska ändra i koden....

 

Hur ska jag göra för att byta till en sql-server-databas

 

HÄR ÄR KODEN MED ACCESS-DATABAS:

 


<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Oledb" %>
<script runat="server">
sub submit(obj as object, e as eventargs)

   Dim MinConnectionString as string = _
   "Provider=Microsoft.Jet.Oledb.4.0;" & _
   "Data Source=MinDatabas.mdb"

   Dim strSQL As String = "INSERT INTO tabell1(namn) VALUES(@Namn)"
   Dim Conn As New OledbConnection(MinConnectionString)
   Dim Command As New OledbCommand("",Conn)

       Command.CommandText = strSQL

       Dim Namn As New OledbParameter("@Namn", DbType.String)
           Namn.Value = tbNamn.Text
           Command.Parameters.Add(Namn)

       Try
           Conn.Open()
           Command.ExecuteNonQuery()
           Conn.Close()

           response.redirect("startsida.aspx")
       Catch Ex As Exception
           lblMessage.text = "Ett fel inträffade"
       End try

    end sub

</script>

 

 

Så här tror jag att man ska göra:

 

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.sqlclient" %>
<script runat="server">

   Sub Spara(ByVal obj As Object, ByVal e As EventArgs)

       Dim ConnectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MinDatabas.mdf;Integrated Security=True;User Instance=True"

       Dim strSQL As String = ("INSERT INTO Tabell1 ( Fornamn ) VALUES ( @Namn )") 

       Dim Conn As New SqlConnection(ConnectionString)
       Dim Command As New SqlCommand("", Conn)

       Command.CommandText = strSQL

       Dim Namn As New SqlParameter("@Namn", DbType.String)
       Namn.Value = TextBox1.Text
       Command.Parameters.Add(Namn)


       Try
       Conn.Open()
       Command.ExecuteNonQuery()
       Conn.Close()

       Response.Redirect("startsida.aspx")
       Catch Ex As Exception
       TextBox1.Text = "Ett fel inträffade!"
       End Try

   End Sub

</script>

 

Jag får dock meddelanet: Cannot insert the value NULL into column 'id'

 

Kan det vara något jag har gjort fel vid skapandet av sql-databasen.

Databasen innehåller:

En tabell "Tabell1" och två kolumner: id som är satt som primary key (int) och en "Fornamn" (ntext)

 

Ps. Det där med identity förstår jag inte...det behövdes ju inte med access-databasen...

 

 

[inlägget ändrat 2006-11-10 13:51:27 av Tigers21]

Link to comment
Share on other sites

Jag har nu frågat runt på lite andra forum och du verkar ha rätt med det du sa om identity...

 

Du skulle inte kunna utveckla ditt svar lite så jag förstår...antar att det endast bara är typ en rad med kod som behövs?

 

Link to comment
Share on other sites

Ps. Det där med identity förstår jag inte...det behövdes ju inte med access-databasen...

Access är ju skräp ju =)

Men i SQL Server gäller följande:

Du har två egenskaper för ett fält som är av vikt just nu. Använder du Enterprise Manager för att skapa tabellen så heter de "Allow Nulls" och "Identity". För ett räknarfält (ditt "id") kryssar man bort "Allow Nulls" och sätter Identity till "Yes". Glömmer du sätta Identity till "Yes" så har den inget värde att lägga in i räknarfältet och eftersom det inte tillåter Null så får du ett felmeddelande.

 

Gå alltså in i Enterprise Manager och sätt Identity=Yes. Om du inte använder Enterprise Manager och vill lösa det genom queries istället så måste du först radera id-kolumnen och sedan återskapa den med rätt egenskaper satta (du kommer alltså förlora eventuella värden som redan ligger där, så detta är ingen lösning om du har poster andra tabeller som redan är kopplade till detta)

ALTER TABLE DinTabell DROP COLUMN id
ALTER TABLE DinTabell ADD id int IDENTITY (1, 1) NOT NULL

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...