i can't seem find example of online. want pass of values of multiselect listbox sql stored procedure write them table.
i know if want pass 1 selected value sql this:
c#:
using (sqlcommand cmd = new sqlcommand("sp_registeruser", conn)) { cmd.commandtype = commandtype.storedprocedure; using (sqldataadapter da = new sqldataadapter(cmd)) cmd.parameters.add("@userpreferences", sqldbtype.char).value = matchprefs.selectedvalue; cmd.parameters.add("@username", sqldbtype.char).value = username.text; conn.open(); cmd.executenonquery(); sql:
alter procedure [dbo].[sp_registeruser] @userpreferences varchar(max), @username varchar(25) begin insert tmpusermatch ( userid, matchfield, matchvalue ) values ( (select top 1 userid tmpusers username = @username), 'matchpreferences', @userpreferences ) end but how if matchprefs multiselect?
edit
i have c# part down, replacing:
cmd.parameters.add("@userpreferences", sqldbtype.char).value = matchprefs.selectedvalue; with:
var selectedinterests = matchprefs.items.cast<listitem>().where(item => item.selected).select(item => item.value).tolist(); string strinterests = string.join(",", selectedinterests).trimend(); cmd.parameters.add("@userpreferences", sqldbtype.char).value = strinterests; and on sql end have function create table-valued parameter:
select * dbo.csvtotable(@userpreferences) just need completing sql side 2 additional fields need include; userid , matchfield.
- don't prefix procs
sp_(this hurts performance causes sql server in[master]db first) - use
sqldbtype.varchar - specify max length (
-1max, highly doubt need 8000 characters) - input param definition
@userpreferencesshould have matching max length (again, no reason usemax) - don't pass in
@usernamecan up. pass in@useridinstead. beforehand , store in session or viewstate if use on several pages, else when load initial page. - why instantiate
dataadapter? - your sql split function doesn't create table-valued parameter. returns result set.
insert schemaname.tmpusermatch ( userid, matchfield, matchvalue ) select @userid, 'matchpreferences', csv.splitval dbo.splitcsv(@userpreferences) csv;
Comments
Post a Comment