c# - Why should I use SqlCommand.CommandType = StoredProcedure? -
this question has answer here:
question: difference between using standard sqlcommand , sqlcommand.comandtype = storedprocedure?
since i'm not sure if parameters passed command object by name or by order, prefer this:
sqlcommand ocmd = new sqlcommand("exec sp_storedprocedure @param1, @param2, @param3", odbconnection); ocmd.parameters.add("param1", sqldbtype.bit).value = var_param1; ocmd.parameters.add("param2", sqldbtype.nvarchar).value = var_param2; ocmd.parameters.add("param3", sqldbtype.nvarchar).value = var_param3; rather
sqlcommand ocmd = new sqlcommand("sp_storedprocedure", odbconnection); ocmd.commandtype = storedprocedure; ocmd.parameters.add("param1", sqldbtype.bit).value = var_param1; ocmd.parameters.add("param2", sqldbtype.nvarchar).value = var_param2; ocmd.parameters.add("param3", sqldbtype.nvarchar).value = var_param3; //do parameter names , parameter order matter here? i don't understand why should second?
the first redundant step, forces second (but trivial) query-plan parsed, generated, cached , executed. offers great opportunity mess (for example) forgetting add parameters. need consider parameters in first passed by position (in inner tsql), where-as in second passed by name; name preferable here. likewise, if add new parameter ocmd.parameters have maintenance step of maintaining inner command - or risk introducing bugs, where-as in second example you don't need extra.
basically, first example has nothing @ positive, , lots of negative points.
re pass-by-name versus pass-by-position, feature of exec keyword in tsql. there 2 uses:
exec myproc 'abc', 123 or
exec myproc @foo='abc', @bar=123 the first by-position; 'abc' passed first declared parameter of myproc, , 123 passed second declared parameter of myproc. additional parameters assume default values if have one.
the second by-name; 'abc' passed parameter of myproc called @foo, , 123 passed parameter of myproc called @bar. other parameters assume default values if have one.
so in specific example:
exec sp_storedprocedure @param1, @param2, @param3 is pass-by-position, and:
exec sp_storedprocedure @param1=@param1, @param2=@param2, @param3=@param3 is bass-by-name.
Comments
Post a Comment