DetailsView : inserer des données avec un ID non automatique

Résolu
Utilisateur anonyme - 23 avril 2009 à 18:17
 Utilisateur anonyme - 6 mai 2009 à 08:29
Bonjour,

Je souhaite faire une insertion de donnée dans ma base sur une table 'devise' dont l'id_devise n'est pas auto-incrémentale (pas la possibilité...)
Je ne souhaite pas que l'utilisateur gère l'id_devise. En SQL je peux lui dire de prendre le max id et de lui ajouter +1.

Mais comment en ASP.NET dans le detailsView je dois lui dire ? Merci d'avance pour vos réponses.
Voici le code que j'ai généré :

<asp:DetailsView
ID="DetailsView1"
runat="server"
AutoGenerateRows="False"
DataKeyNames="ID_DEVISE"

DataSourceID="SqlDataSource1"
Height="50px"
Width="125px">

<Fields>

<asp:BoundField
DataField="ID_DEVISE"
HeaderText="ID_DEVISE"
ReadOnly="True"
SortExpression="ID_DEVISE"
/>
<asp:BoundField
DataField="CODE_DEVISE"
HeaderText="CODE_DEVISE"
SortExpression="CODE_DEVISE"
/>
<asp:BoundField
DataField="NOM_DEVISE_FR"
HeaderText="NOM_DEVISE_FR"
SortExpression="NOM_DEVISE_FR"
/>
<asp:BoundField
DataField="NOM_DEVISE_EN"
HeaderText="NOM_DEVISE_EN"
SortExpression="NOM_DEVISE_EN"
/>
<asp:CommandField
ShowInsertButton="True"
/></Fields>

</asp:DetailsView>
<asp:SqlDataSource
ID="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:Conv_IntranetConnectionString %>
"

InsertCommand="INSERT INTO DEVISE(ID_DEVISE, CODE_DEVISE, NOM_DEVISE_FR, NOM_DEVISE_EN) VALUES (ID_DEVISE + 1, @code_devise, @nom_devise_fr, @nom_devise_en)"

SelectCommand="SELECT ID_DEVISE, CODE_DEVISE, NOM_DEVISE_FR, NOM_DEVISE_EN FROM DEVISE WHERE (ID_DEVISE = (SELECT MAX(ID_DEVISE) AS Expr1 FROM DEVISE AS DEVISE_1))">

<InsertParameters>
<asp:Parameter
Name="code_devise"
/>
<asp:Parameter
Name="nom_devise_fr"
/>
<asp:Parameter
Name="nom_devise_en"
/>
</InsertParameters>
</asp:SqlDataSource>

1 réponse

Utilisateur anonyme
6 mai 2009 à 08:29
J'ai fini par trouver.
L'auto-incrémentation est possible dans la commande Insert en spécifiant le select Max ID+1 dans la table.

<asp:SqlDataSource
ID="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:Conv_IntranetConnectionString %>
"

InsertCommand="INSERT INTO DEVISE(ID_devise, CODE_DEVISE, NOM_DEVISE_FR, NOM_DEVISE_EN) SELECT MAX(ID_DEVISE)+1 ,@code_devise, @nom_devise_fr, @nom_devise_en FROM DEVISE"

SelectCommand="SELECT ID_DEVISE, CODE_DEVISE, NOM_DEVISE_FR, NOM_DEVISE_EN FROM DEVISE WHERE (ID_DEVISE = (SELECT MAX(ID_DEVISE) AS Expr1 FROM DEVISE AS DEVISE_1))">

<InsertParameters>

<asp:Parameter
Name="id_devise"
Type="Int32"/>

<asp:Parameter
Name="code_devise"
/>

<asp:Parameter
Name="nom_devise_fr"
/>

<asp:Parameter
Name="nom_devise_en"
/>

</InsertParameters>

</asp:SqlDataSource>
3
Rejoignez-nous