IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Convert.ChangeType et SqlParameter [Failed to convert parameter value from a SqlPara


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut Convert.ChangeType et SqlParameter [Failed to convert parameter value from a SqlPara
    Bonjour a tous!

    J'ai un petit soucis que je n'arrive pas à comprendre avec ma couche d'accès aux données...

    J'utilise Microsoft.ApplicationBlocks.Data (SQLHelper) afin d'appeler (entre autre) des procédure stockées SqlServer 2005.

    Seulement j'ai cette Exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [InvalidCastException: Object must implement IConvertible.]
       System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +2560525
       System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType) +896
     
    [InvalidCastException: Failed to convert parameter value from a SqlParameter to a Int32.]
       Data.DataProvider.ExecuteNonQuery(String procedureName, Object[] parameters) in E:\Projects\MMM.Developement\src\DataAccesLayer\DataProvider.cs:91
       Data.Bases.ProviderBase.Insert(EntityBase item) in E:\Projects\MMM.Developement\src\DataAccesLayer\ProviderBase.cs:198
       Data.Bases.EntityBase.Save() in E:\Projects\MMM.Developement\src\DataAccesLayer\EntityBase.cs:128
       Data.Providers.UserHostAdressProvider.CreateIfNoExists(String ip) in E:\Projects\MMM.Developement\src\DataAccesLayer\Providers\UserHostAdressProvider.cs:20
       Data.Entities.SessionTracker..ctor() in E:\Projects\MMM.Developement\src\DataAccesLayer\Entities\SessionTracker.cs:24
       UnitTest.WebSite.Global.get_SessionTracker() in E:\Projects\MMM.Developement\src\UnitTest.WebSite\Global.asax.cs:25
       UnitTest.WebSite.Global.Application_BeginRequest(Object sender, EventArgs e) in E:\Projects\MMM.Developement\src\UnitTest.WebSite\Global.asax.cs:45
       System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64
    Je comprend tout à l'exception en elle même, mais je ne comprend ce qui peut bien la lever...

    En effet j'ai la procédure stockée suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE PROCEDURE [dbo].[G_Ref_Browser_Insert]
         @brw_id Int OUT
        , @brw_name NVarChar(255) = null
        , @brw_identity NVarChar(255) = null
     
    AS
    BEGIN
        INSERT INTO [dbo].[Ref_Browser]
            VALUES (@brw_name
            , @brw_identity
            )
     
        SET @brw_id = SCOPE_IDENTITY()
    END
    Et lorsque que j'exécute ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach (KeyValuePair<Column, object> pair in m_columnsValues)
    {
        SqlParameter p = new SqlParameter(pair.Key.Name, pair.Key.Type);
        if (pair.Key.Identity)
            p.Direction = ParameterDirection.InputOutput;
        p.Value = (pair.Value != null)? pair.Value : DBNull.Value;
     
        parameters.Add(p);
    }
    SqlHelper.ExecuteNonQuery(m_connectionString, procedureName, parameters);
    Je me retrouve avec les valeurs de [parameters] suivantes:
    [0]: @brw_id = 0 (Int32)
    [1]: @brw_name = "IE" (String)
    [2]: @brw_identity = "ie6to9" (String)

    Je ne comprend absolument pas d'où vient le soucis du coup... (à savoir que le même problème se pose si j'ai mon @brw_id_= DBNull.Value)

    Si quelqu'un a déjà rencontrer ce soucis? je vais continuer mes recherches mais je vous avoue que pour le moment je ne trouve rien

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Je me répond a moi même

    J'ai éssayé sans utiliser le SqlHelper, et hô miracle ça fonctionne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    try
    {
        int num = -1;
        using (SqlConnection connection = new SqlConnection(m_connectionString))
        {
            SqlCommand command = new SqlCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = procedureName;
            command.Connection = connection;
            command.Parameters.AddRange(parameters);
     
            connection.Open();
            num = command.ExecuteNonQuery();
            connection.Close();
        }
        return num;
        //return SqlHelper.ExecuteNonQuery(m_connectionString, procedureName, parameters);
    }
    catch (Exception ex)
    {
        m_logger.ErrorFormat(ex.ToString());
        throw ex;
    }
    Mais je ne comprend vraiment pas pourquoi ça ne fonctionne pas avec le SqlHelper, j'ai regardé le code de l'assembly mais je n'ai pas trouvé ou pouvait s'être glissé la fourberie...
    Je n'ai rien trouvé non plus à propos d'un éventuel bug a ce niveau :/

    Je laisse le post en non résolut, l'intéret et de comprendre ce qui se passe avec ce SqlHelper

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/07/2010, 17h50
  2. Enter parameter value
    Par steph05 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/10/2007, 13h24
  3. Réponses: 3
    Dernier message: 29/01/2007, 14h39
  4. Réponses: 2
    Dernier message: 31/01/2006, 15h31
  5. Réponses: 2
    Dernier message: 23/06/2004, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo