CSV v SelectParameteru MSSQL   otázka

VB.NET, SQL, Databáze

Zdravím,

Byl jsem nemile překvapen že mssql neumí hodnoty oddělené strědníkem zapsat v klauzili WHERE IDVyrobek IN (@IDVyrobek) přes .Parameters.AddWithValue("@IDVyrobek", SeznamIDVyrobek)

Tak jsem to musel oběhnout takhle IDVyrobek IN (" & SeznamIDVyrobek & ")", což je přímé dělání SQL dotazů a je nebezpečné z hlediska SQL injection.

Máte nejakou fintu, kterou protlačíte CSV hodnoty do WHERE IN Y ? Procedury atd se mi do projektu nehodí a potřeboval bych to přime ve VB kódu

Diky za radu :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Stačí parametry vložit např ve foreach cyklu pomocí metody Paramaters.AddWithValue

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Napíšete si pomocnou funkci:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
*************************************************************************
 Funkce f_ListToTable

 Popis:
 Funkce vrací tabulku hodnot ze seznamu hodnot oddělených čárkou (bez mezer, např. '1,2')
*************************************************************************
*/
ALTER FUNCTION [dbo].[f_ListToTable]
	(@List text)
RETURNS @RetTbl TABLE (Value int)
AS
BEGIN

DECLARE @Start int
DECLARE @Value varchar(15)
DECLARE @Char varchar(1)

SET @Start = 1
SET @Value = ''
SET @Char = '-'

WHILE NOT (LEN(@Char) = 0)
BEGIN
	SET @Char = SUBSTRING(@List, @Start, 1)

	IF @Char = ','
	BEGIN
		INSERT INTO @RetTbl VALUES (CAST(@Value AS int))
		SET @Value = ''
	END
	ELSE
	BEGIN
		SET @Value = @Value + ISNULL(@Char,'')
	END

	SET @Start = @Start + 1
END

IF NOT @Value = ''
BEGIN
	INSERT INTO @RetTbl VALUES (CAST(@Value AS int))
END

RETURN
END

A potom v tom SQLku můžete mít:

WHERE IDVyrobek IN (SELECT Value FROM dbo.f_ListToTable(@SeznamIDVyrobek))

kde parametr @SeznamIDVyrobek je typu text a bude obsahovat seznam IDček oddělený čárkou (např. "1,2").

Pokud potřebujete jiný oddělovač upravte si tu funkci f_ListToTable.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback