none
Accés à base de données - SQL SERVER EXPRESS RRS feed

  • Question

  • Bonjour,
    je suis tout nouveau dans la programmation ASP.NET et j'ai un problème au niveau de l'accés à ma base de données.

    Voilà l'erreur :
    Server Error in '/' Application.


    Impossible d'ouvrir la base de données "document" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'sa'.

    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: Impossible d'ouvrir la base de données "document" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'sa'.
    Source Error:

    Line 25:         {
    Line 26:             SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM authors", cn);
    Line 27:             cn.Open();
    Line 28:             SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    Line 29:             rdr.Read();
    Source File: x:\Inetpub\wwwroot\SITE_COTIC\Savoirs\Documents\ListeDoc.ascx    Line: 27
    Stack Trace:

    [SqlException (0x80131904): Impossible d'ouvrir la base de données "document" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'sa'.]
       System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +171
       System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +199
       System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2406
       System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +34
       System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +223
       System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +371
       System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +184
       System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +193
       System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +502
       System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +28
       System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +429
       System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +70
       System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +510
       System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +85
       System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +89
       System.Data.SqlClient.SqlConnection.Open() +160
       ASP.documents_listedoc_ascx.Page_Load(Object sender, EventArgs e) in x:\Inetpub\wwwroot\SITE_COTIC\Savoirs\Documents\ListeDoc.ascx:27
       System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43
       System.Web.UI.Control.OnLoad(EventArgs e) +80
       System.Web.UI.Control.LoadRecursive() +49
       System.Web.UI.Control.LoadRecursive() +132
       System.Web.UI.Control.LoadRecursive() +132
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3745
    
    Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832

    et voici le code que j'utilise pour ma connexion :

    protected void Page_Load(object sender, EventArgs e) {

    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectString"].ToString())) {

    SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM document", cn);
    cn.Open();
    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    rdr.Read();
    Response.Write(rdr[0].ToString()); //read a value
    }
    }

    Et le fichier web.config :

    <connectionStrings>
        <add name="ConnectString"
            connectionString="Server=Mon serveur\SQLExpress;Database=ma table;User id=l'identifiant SQL sevrer; password=mot de passe SQL Server"
            providerName="System.Data.SqlClient" />
      </connectionStrings>
    <system.web>
    <compilation
             defaultLanguage="c#"
             debug="true"
             strict="false"
             explicit="true"
        />
    <pages>
       <namespaces>
        <clear/>
        <add namespace="System"/>
        <add namespace="System.Collections"/>
        <add namespace="System.Collections.Specialized"/>
        <add namespace="System.Configuration"/>
        <add namespace="System.Text"/>
        <add namespace="System.Text.RegularExpressions"/>
        <add namespace="System.Web"/>
        <add namespace="System.Web.Caching"/>
        <add namespace="System.Web.SessionState"/>
        <add namespace="System.Web.Security"/>
        <add namespace="System.Web.Profile"/>
        <add namespace="System.Web.UI"/>
        <add namespace="System.Web.UI.WebControls"/>
        <add namespace="System.Web.UI.WebControls.WebParts"/>
        <add namespace="System.Web.UI.HtmlControls"/>
                    <add namespace="Savoirs.Outils" />
       </namespaces>
      </pages>
    <customErrors
          mode="Off"
          defaultRedirect="Erreur.htm"
        >
        <error
            statusCode="404"
            redirect="Erreur404.htm"
          />
        </customErrors>

    <trace
            enabled="false"
            requestLimit="10"
            pageOutput="false"
            traceMode="SortByTime"
      localOnly="true"
        />

        <sessionState
                mode="InProc"
                stateConnectionString="tcpip=?????"
                sqlConnectionString="data source=L'adresse IP de mon serveur"
                cookieless="false"
                timeout="20"
        />

        <globalization
                requestEncoding="utf-8"
                responseEncoding="utf-8"
       />
     </system.web>
    </configuration>

    Voila, et je developpe en langage C# sous l'environnement Web Matrix et, j'accède à ma base de données via une connexion à un serveur (connexion machine/serveur avec un switch) qui heberge SQL SERVER EXPRESS 2005, et que j'utilise une authentification SQL (avec id et mot de passe).

    Merci d'avance pour vos reponses,
    Ca m'aiderait vraiment à avancer dans mon projet...

    Je vous suis déjà tres reconnaissant pour l'existence de ce genre de forum...

    mercredi 9 juillet 2008 14:58

Réponses

  • Bonjour,

     

    connectionString="Server=Mon serveur\SQLExpress;Database=ma table;User id=l'identifiant SQL sevrer; password=mot de passe SQL Server"

     

    Dans Database=XXXXX vous devez mettre le nom de votre base de données, et non le nom de la table.

     

    Cordialement

     

    mercredi 9 juillet 2008 20:28
    Modérateur

Toutes les réponses

  • Bonjour,

     

    connectionString="Server=Mon serveur\SQLExpress;Database=ma table;User id=l'identifiant SQL sevrer; password=mot de passe SQL Server"

     

    Dans Database=XXXXX vous devez mettre le nom de votre base de données, et non le nom de la table.

     

    Cordialement

     

    mercredi 9 juillet 2008 20:28
    Modérateur
  • Oui, c'est exactement ça... j'y avais reflechi en fin de journée et ça a marché...
    Il fallait juste configuré mon serveur (installation du framework 2.0 pour qu'il puisse reconnaitre mon connectStrings)

    En tout cas, je vous remercie pour votre réponse...

    Bonne continuation et merci encore
    jeudi 10 juillet 2008 20:03
  •  

    Bonjour,

     

    Sinon à part ça, utiliser le compte "sa" pour l'accès depuis l'application est suicidaire.

    Quitte à utiliser une authentification SQL il vaut mieux passer par un autre compte ne possédant que les privilèges réellement nécessaires.

     

    lundi 14 juillet 2008 16:26