Une directive manquante

Signaler
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009
-
titeoe
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
-
Bonsoir,

Je code une application web en C#, mais au moment de la compilation, on me génère l'erreur suivante :

le type ou le nom d'espace de SQLAdapter, SQLCommand, DataGrid... est introuvable
J'ai défini pourtant les librairies au début du programme à savoir :

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Resources;
using System.Drawing;
using System.ComponentModel;
using System.Data.Sql;
using System.Data.SqlClient;

Quelqu'un pourrait me dire quelle librairie me manque-t-il ?

Merci et bonne année à tous !

11 réponses

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
79
Salut,

Les directives using et l'ajout de référence sont 2 choses distinctes.
La directive using est en quelquesorte là pour ne pas avoir à spécifier les noms complets des types (exemple : SqlCommand au lieu de System.Data.SqlClient.SqlCommand).
L'ajout de référence permet au compilateur d'avoir accès aux assemblies contenant les types utilisés.

Le meilleur moyen de connaitre l'assembly dans lequel se trouve le type est bien entendu de regarder la documentation de ce type, elle donne entres autres cette information.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

Merci pour l'explication !

D'après mes recherches, j'ai trouvé qu'il fallait ajouter l'assembly : System.Windows.Forms;

Alors que je travaille sur une application web, même quand j'ai inséré cette ligne dans mon code, on m'affiche l'erreur : le type ou le nom d'espace de noms 'Windows' n'existe pas dans l'espace de noms 'System' (une référence d'assembly est-elle manquante ?)
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
79
Il ne faut pas confondre le contôle DataGrid ASP.NET avec le contrôle DataGrid WinForms.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

Oui, je ne les confonds pas :S
J'ai pourtant inséré l'assembly System.Web.UI.WebControls.
Voici le bout de code que j'ai écrit :

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Resources;
using System.Drawing;
using System.ComponentModel;
using System.Data.Sql;
using System.Data.SqlClient;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
       protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack)
    {
        // parcourt la liste des contrôles
        foreach (string ctl in this.Request.Form)
        {
            Control c = this.FindControl(ctl);

            if (c is System.Web.UI.WebControls.Button)
            {
                // on ne s'intéresse qu'au Button
                Response.Write(c.ID + "
");
            }
        }
    }

        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection("Data Source=KHAOULA;" + "Initial Catalog=basePFA;Integrated Security=SSPI");
          try
                {
                    SqlCommand com = new SqlCommand("procStock1", con);
                    com.CommandType = CommandType.StoredProcedure;
                    com.Parameters.Add("@idEtud", SqlDbType.Int).Value = new int();
                    com.Parameters.Add("@nomEtud", SqlDbType.VarChar).Value = "";
                    com.Parameters.Add("@prenomEtud", SqlDbType.VarChar).Value = "";

                    SqlDataAdapter DA = new SqlDataAdapter(com);
                    DataSet dt = new DataSet("Etudiants");
                    DA.Fill(dt, "procStock1"); dataGrid1.SetDataBinding(dt, "procStock1");
                 }
           
            catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Erreur", MessageBoxButtons.OK);
                }
        }
    }
}

  
  Il sert à afficher les Nom et Prénom d'un étudiant si on introduit son ID, il fait appel à ma procédure stockée déjà créée sous SQL Server Managment.
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
Bonjour,

Si tu passe en mode design dans, peux tu regarder quel est le type du controle dataGrid1 ? Il devrai etre de type gridview et non de type datagrid.

---------------------------------------
R. Seb
MCP C# 2.0 - MCTS ASP.Net 2.0
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

Bonjour,
Je n'ai pas compris tout à fait où fallait que je regarde, le seule endroit où j'i du code html c'est au niveau de mon fichier Default.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Page sans titre</title>
</head>

    <form id="form1" runat="server">
   

   
        ID Ingénieur
   
   

    </form>

</html>

Merci.
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
Dans le code behind , il y a la ligne :
" DA.Fill(dt, "procStock1"); dataGrid1.SetDataBinding(dt, "procStock1"); "

question : ou se trouve le controle dataGrid1 ?

Autre remarque, si tu met en commentaire la ligne "  MessageBox.Show(this, ex.Message, "Erreur", MessageBoxButtons.OK); " tu n'aura plus de référence a windows forms car c'est MessageBox qui fait cette référence.

---------------------------------------
R. Seb
MCP C# 2.0 - MCTS ASP.Net 2.0
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

J'ai commenté ce qu'il y a dans le bloc catch.

Au fait, j'ai écrit ces deux lignes parce qu'on a appris à les écrire à chaque fois qu'on se connecte à une base de données. Mon dataAdapter va remplir un dataSet par sa méthode Set et il doit après "répercuter" mes mises à jour dans la source de données. J'ai fait la liaison (binding) entre le dataSet et un dataGrid.

Je veux avoir à la fin une interface web (trop simple) qui ressemble à :
http://cjoint.com/data/bcsWi2lpn6_PFA.JPG

J'introduis l'ID ingénieur et je récupère ses nom et prénom. Normalement, la procédure stockée que j'ai créée répond normalement à ma requête, il fallait juste l'appeler.

Que devrais-je faire ?
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
J'ai dis de commenter tes lignes du bloc catch pour résoudre ton probleme de référence au namespace Windows. En effet, c'est messageBox qui provoque cette référence.

Par contre, dans ton bloc catch, il faut bien renvoyer un message d'erreur, comme par exemple un label du style "erreur sur la page".


Ton problème est que tu mélange ASP.Net (Web) avec des contrôles windows (MessageBox).

---------------------------------------
R. Seb
MCP C# 2.0 - MCTS ASP.Net 2.0
Messages postés
2
Date d'inscription
mercredi 11 février 2009
Statut
Membre
Dernière intervention
9 novembre 2009

bjr tous le mond si il y a quelqu'un pe m'aidé svp je ve généré un fichier excel sous asp j'ai le code mais il me donne l'erreur suivant 'System.Web.UI.Page' est un type, pas un espace de noms
voici le code et merci
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI.Page;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Xsl;




namespace alliancepages.excelxparticle
{

/// <summary>
/// Summary description for doTransformation.
/// </summary>
public partial class _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Xml xml;

protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection(connectionString);
// Put user code to initialize the page here
XsltArgumentList argList=new XsltArgumentList();
argList.AddExtensionObject("http://www.aspalliance.com/joteke",new excelxparticle.Extension());

xml.TransformArgumentList=argList;
xml.DataBind();
Response.ContentType ="vnd/ms-excel";

}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>

}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
hello

remplace la ligne :
using System.Web.UI.Page;
par
using System.Web.UI;


---------------------------------------
R. Seb
MCP C# 2.0 - MCTS ASP.Net 2.0