Asp.net - Sql Server : Cannot insert the value NULL into column 'id' [Résolu]

Signaler
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
-
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
-
Bonjour,

J'ai essayé de faire une page asp.net avec une simple page pour faire un ajout dans une base de donné mysql server. Pour cela j'ai utilisé une FormView et une SQLDataSource ou j'ai défini ma StoredProcédure "NewMembre" pour l'Insert.

Il m'a donc bien généré mon formulaire dans le formview. Seul problème il a mis aussi un label et un textbox pour l'id (qui est primarykey), jusque la sa allais (je devais donc entré une id manuellement dans le textbox comme les autre champs). Comme je voulais pas sa j'ai supprimé le label et textbox id dans le code. APrès, à l'exécution, quand je remplis les autre champs et que je valide il me fait une erreur pour l'id :


Cannot insert the value NULL into column 'id', table 'paris.dbo.membres'; column does not allow nulls. INSERT fails.
The statement has been terminated.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'id', table 'paris.dbo.membres'; column does not allow nulls. INSERT fails.
The statement has been terminated.

Source Error:


An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


J'ai pourtant bien défini le DataKeyNames="id" dans mon FormView.

(pour info ma stored procédure est la suivante : )
ALTER PROCEDURE [mailto:dbo.NewMembre@id dbo.NewMembre
@id]
int
,@par
varchar(25)
,@date
nvarchar(15)
,@post
varchar(220)

AS
insert INTO [membres] ([id], [par], [date], [post])
values (@id, @par, @date, @post)

RETURN

Grand merci.

A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
A voir également:

11 réponses

Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Tu defini identity "yes" pour ton id dans le champ qui se trouve en bas du design
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Ma fonction permet de retourner le carré du nombre que tu as rentré.
Cela ne sert pas a grand chose si ce n'est t'expliquer le return

Mais non, je ne connais pas de bon livre permettant de débuter avec sql, et un tuto non plus.

Je te conseil :
pour les procédures : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_07_7yw5.asp
pour tes propres fonctions : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_08_460j.asp
et pour les triggers : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/createdb/cm_8_des_08_116g.asp

Cependant, ce sont déjà des composants "avancé", tu devrais donc chercher par toi même les choses que tu ne comprends pas dans ces liens.

Voilà, c'est tout ce que je peux te proposer,
A+

ElpenS
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Je te conseil de mettre ton champs ID en incrémentation auto (dans ta base sql) et de ne pas le toucher dans ta procédure

ALTER PROCEDURE [mailto:dbo.NewMembre@id dbo.NewMembre

]@par varchar(25)
,@date nvarchar(15)
,@post varchar(220)

AS
insert INTO [membres] ([par], [date], [post]) values ( @par, @date, @post)
RETURN
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
1
J'ai déjà essayé mais même problème :


Server Error in '/WebSite3' Application.
<HR width="100%" color=silver SIZE=1>


Cannot insert the value NULL into column 'id', table 'paris.dbo.membres'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'id', table 'paris.dbo.membres'; column does not allow nulls. INSERT fails.
The statement has been terminated.

Source Error:


An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.



A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
1
Oui le problème est qu'il auto incremente pas.

Ou on défini dans SQL Setrver qu'il doit auto incrémenter ?


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
Messages postés
425
Date d'inscription
mercredi 22 janvier 2003
Statut
Modérateur
Dernière intervention
13 juillet 2007

Ou bien faire:


ALTER PROCEDURE dbo.NewMembre

@par varchar(25)
,@date nvarchar(15)
,@post varchar(220)

AS
insert INTO [membres] ([id], [par], [date], [post]) values (newid(), @par, @date, @post)
RETURN


si tu travailles avec des guid comme identifiants uniques



<HR>



Azra (Florent) - MVS - MCAD.NET
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
1
En tout cas sa fonctionne avec le identify yes.

Grand emrci à vous.


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
1
Au faite, pourquoi au premier on met pas de virgule ? @par varchar(25)
,@date nvarchar(15)

Et pas aux autres oui ?
Et à quoi sert le RETURN ?


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

C'est normal de ne pas mettre de virgule au premier, car c'est une fonction. Mais c'est pour une raison de clarté que l'on met un return à chaque ligne...

ALTER PROCEDURE
dbo.NewMembre ( @par varchar(25), @date nvarchar(15), @post varchar(220) )
AS ...

Et le return permet de te retourner une valeur :

CREATE FUNCTION Square (@x int)
AS
BEGIN
RETURN @x * @x;
END

Et tu execute : SELECT square(5) te retournera 25

J'espere avoir répondu a tes questions

Bonne journée

ElpenS
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
1
Oui, merci je comprend mieux.

Seul truc je ne comprend pas bien ce que fait ta fonction

Merci
PS: Tu connais pas un bon livre ou tuto pour débuter avec SQL justement (surtoup pour les stored procedure, function...)


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
Messages postés
153
Date d'inscription
dimanche 2 octobre 2005
Statut
Membre
Dernière intervention
27 juillet 2006
1
Merci


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/