tsql - Safety of C# DataTable as SQL Parameter -
i read lot sql injections lately , know sqlparameter not prevent injections sure, table parameter safe single parameter?
some untested uncompiled example code clarification:
is this...
sql:
create procedure dbo.insertsingle @name nvarchar(max), @phone nvarchar(max) begin set nocount on; insert foobar.dbo.sometable values(@name, @phone) end go c#:
foreach(user u in users) { connection.open(); sqlcommand com = connection.createcommand(); com.commandtype = commandtype.storedprocedure; com.commandtext = "dbo.insertsingle"; sqlparameter p = new sqlparameter("@name", u.name); com.parameters.add(p); p = new sqlparameter("@phone", u.phone); com.parameters.add(p); com.executescalar(); } as safe this?
sql:
create procedure dbo.insertbunch @valuesastable dbo.valuesastabletype readonly begin set nocount on; insert foobar.dbo.sometable select * @valuesastable end go c#:
datatable valuesastable = users.getsomeinsertdata(); connection.open(); sqlcommand com = connection.createcommand(); com.commandtype = commandtype.storedprocedure; com.commandtext = "dbo.insertbunch"; sqlparameter p = new sqlparameter("@valuesastable", valuesadtable); p.sqldbtype = sqldbtype.structured; p.typename = "dbo.valuesastabletype"; com.parameters.add(p); com.executescalar(); i tried search it, cannot find input. can link me in right direction?
thanks in advance
typed parameters prevent sql injection if there no possibility interpreted literal commands, , executed. whether transported scalar or table-valued parameters, not make difference in regard.
Comments
Post a Comment