Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
IDbCommand and Parameters.AddWithValue()
Message
De
20/03/2012 10:50:54
 
 
Information générale
Forum:
ASP.NET
Catégorie:
ADO.NET
Versions des environnements
Environment:
C# 2.0
Divers
Thread ID:
01538772
Message ID:
01538785
Vues:
39
This message has been marked as a message which has helped to the initial question of the thread.
>>>>>Hi,
>>>>>
>>>>>I am working on a case of replacing what the gurus call "programming to class" with "programming to interface" for the following code:
>>>>>
>>>>>First, the code the way it works currently (not with interface)
>>>>>
>>>>>OleDbCommand oCommand = new OleDbCommand();
>>>>>// connectionString is valid string (not shown here)
>>>>>OleDbConnection oConnection = new OleDbConnection(connectionString);
>>>>>oConnection.Open();
>>>>>oCommand.CommandText = "SP_MyProc";
>>>>>oCommand.CommandType = CommandType.StoredProcedure;
>>>>>oCommand.Parameters.AddWithValue( "@par1", cPar1 );
>>>>>
>>>>>
>>>>>The following is my replacement code (simplified):
>>>>>
>>>>>IDbCommand oCommand;
>>>>>idbCommand = new OleDbCommand();
>>>>>// connectionString is valid string (not shown here)
>>>>>OleDbConnection oConnection = new OleDbConnection(connectionString);
>>>>>oConnection.Open();
>>>>>oCommand.CommandText = "SP_MyProc";
>>>>>oCommand.CommandType = CommandType.StoredProcedure;
>>>>>oCommand.Parameters.AddWithValue( "@par1", cPar1 );
>>>>>
>>>>>
>>>>>The problem is that in the lower case code the method .AddWithValue has an error:
>>>>>
>>>>>'System.Data.IDataParameterCollection' does not contain definition for 'AddWithValue'
>>>>>
>>>>>
>>>>>What am I missing? TIA.
>>>>
>>>>I suggest to not use AddWithValue method in any of your new code. Use more verbose, but correct Parameters.Add method where you can specify parameter's type. AddWithValue method has problems and it's even being deprecated.
>>>
>>>But I read in MSDN help that the method Add is deprecated and AddViewValue replaced it.
>>>
>>>http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.90).aspx
>>
>>No, only one particular implementation of the Add method is deprecated (one overload). Use the correct overload.
>
>I will try. Thank you.
>
>But my question was/is still, why the "interface"-based code didn't work but the class-based code does. I am trying to understand these concepts better.

If you look at IDbCommand (http://msdn.microsoft.com/en-us/library/system.data.idbcommand.aspx) you will see that its 'Parameters' property is an IDataParameterCollection (http://msdn.microsoft.com/en-us/library/system.data.idataparametercollection.aspx) which does not have a AddValue() method. When a class implements an interface it may well (indeed is likely to) have methods and properties which are not defined in the interface.....
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform