Asp.net - Sql Server : Cannot insert the value NULL into column 'id'

Résolu
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 - 28 févr. 2006 à 11:40
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 - 1 mars 2006 à 11:55
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/

11 réponses

cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
1 mars 2006 à 08:12
Tu defini identity "yes" pour ton id dans le champ qui se trouve en bas du design
3
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
1 mars 2006 à 11:35
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
3
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
28 févr. 2006 à 14:35
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
0
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 1
28 févr. 2006 à 15:58
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/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 1
28 févr. 2006 à 16:07
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/
0
cs_azra Messages postés 425 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 13 juillet 2007 1
1 mars 2006 à 08:32
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
0
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 1
1 mars 2006 à 08:43
En tout cas sa fonctionne avec le identify yes.

Grand emrci à vous.


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
0
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 1
1 mars 2006 à 08:46
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/
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
1 mars 2006 à 09:49
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
0
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 1
1 mars 2006 à 10:11
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/
0
Nexto Messages postés 153 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 27 juillet 2006 1
1 mars 2006 à 11:55
Merci


A++

Nexto (Alias: fabienfs)
http://www.actuinfos.com/
0
Rejoignez-nous