c# - Trouble with parameterized query -
i'm having trouble parameterized query in odbc works when i'm working sqlclient objects.
using (odbcconnection conn = new odbcconnection()) { conn.connectionstring = myconnectionstring; conn.open(); using (odbccommand comm = new odbccommand()) { comm.connection = conn; comm.commandtext = "select mytable.mycolumn myschema.mytable mycolumn = @myparam"; comm.parameters.add(new odbcparameter("@myparam",myvalue)); using (odbcdatareader reader = comm.executereader) { //do stuff } } } the message
error [42s22] [ibm][cli driver][db2/aix64] sql0206n "@myparam" not valid in context used. sqlstate=42703
but if i'm using sqlclient namespace can replace odbc sql everywhere above , works fine. missing?
from odbcparameter.parametername property
instead of named parameters, odbc .net provider uses positional parameters marked question mark (?) in syntax of command text. parameter objects in odbcparametercollection , actual parameters accepted stored procedure or parameterized sql statement correspond each other based on order in odbcparameter objects inserted collection instead of parameter name.
that's why should use parameters as;
comm.commandtext = @"select mytable.mycolumn myschema.mytable mycolumn = ?"; comm.parameters.add(new odbcparameter("@myparam",myvalue)); actually, doesn't matter write parameter name in odbcparameter constructor because real important thing order odbcparameter parameters.
that's why both bottom lines work commandtext because have 1 parameter :-)
comm.parameters.add(new odbcparameter("user2320861",myvalue)); comm.parameters.add(new odbcparameter("meaningless string",myvalue));
Comments
Post a Comment