Я не могу найти хороший пример этого онлайн. То, что я хочу сделать, - передать все значения многосетевого списка в хранимую процедуру SQL, чтобы записать их в таблицу.Передача многозадачных выбранных элементов в SQL Server 2008
Я знаю, что если я хочу передать одно выбранное значение в SQL я хотел бы сделать это:
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)
AS
BEGIN
INSERT INTO tmpUserMatch (
UserID,
MatchField,
MatchValue
)
VALUES (
(SELECT Top 1 UserID FROM tmpUsers WHERE UserName = @UserName),
'MatchPreferences',
@UserPreferences
)
END
Но как я бы это сделал, если MatchPrefs является мультиселекцией?
EDIT
У меня есть C# часть вниз, путем замены:
cmd.Parameters.Add("@UserPreferences", SqlDbType.Char).Value = MatchPrefs.SelectedValue;
с:
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;
и на конце SQL У меня есть функция, которая будет создавать таблица-значение:
SELECT * FROM dbo.CSVToTable(@UserPreferences)
Просто нужна помощь, дополняющая SQL-часть двумя дополнительными полями, которые мне нужно включить; UserID и MatchField.
Вы хотите изучить структурированные параметры в ADO.NET и эквивалентные значения табличных параметров в SQL Server SP. В основном это позволяет вам нажимать строго типизированный список объектов на SQL Server SPs/query. Множество примеров здесь и в Интернете. –
Итак, как это сделать с двумя дополнительными полями, которые мне нужно добавить в таблицу SQL (UserID и MatchField)? –
В качестве побочного примечания вам следует избегать префикса sp_, поскольку он зарезервирован для Microsoft и может вызвать некоторые проблемы с производительностью. http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix Или лучше, просто отбросьте префикс целиком. –