Jak zmodyfikowac procedurę w C#, aby móc wywołać ją w sql

0

Witam, napisałem procedurę, która usuwa pliki o określonym parametrze(parametr) i na wyjściu pokazuje mi ilość usuniętych plików. Problem polega na tym, że mam wywołać tą procedurę w sql i trzeba ją jakoś zmodyfikować tak aby dane wejściowe czyli sciezka i parametr można było podawać w sql. Bardzo proszę o pomoc.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace ClassLibrary1
{
    public class usuwanie_Pliku
    {

        static void usuwanie()
        {
            string sciezka = @"c:\test2\";
            string parametr = "*5*.xlsx";
            string rx = parametr.Replace(".", "\\."); //znaki specjale żeby znaczyły to samo co regex w regex kropka zamienia się na //. czyli kropke 
            rx = rx.Replace("?", ".");  //kropka jest pojedyńczym dowolnym znakiem
            rx = rx.Replace("*", ".*"); // wszystkie dowolną ilosc znaków

            Regex war = new Regex(rx);


            int ilosc_plikow = 0;
            try
            {

                string[] txtLista = Directory.GetFiles(sciezka);



                foreach (string f in txtLista)
                {
                    if (war.IsMatch(f))
                    {
                        try
                        {

                            File.Delete(f);
                            Console.WriteLine(f);
                            ilosc_plikow++;
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.WriteLine(ilosc_plikow);
            Console.ReadKey();


        }
        static void Main()
        {
            usuwanie();


        }
    }
}
3

Żebyśmy mieli pewność, chcesz usuwać pliki z poziomu bazy?
W takim razie musisz ze swojego kodu zrobić bibliotekę dll, następnie zarejestrować ją w MSSQL jako moduł CLR (polecenie CREATE ASSEMBLY) oraz utworzyć procedury SQL wołające metody z dllki. Do tego trzeba bazie ustawić TRUSTWORTHY na ON zaś assembly musi mieć ustawione PERMISSION_SET = EXTERNAL_ACCESS. Zakładam, że bezpieczeństwo takiego rozwiązania Cię nie interesuje?
No, a jak chcesz jakieś parametry przekazywać do metody usuwanie, to musisz poprawić jej sygnaturę.

0

Nie wgłębiając się w szczegóły wydaje się to dość głupim pomysłem. Dlaczego chcesz (musisz) zrobić to w taki sposób?

0

z utworzeniem pliku dll oraz z Assembly nie będę miał problemu, ponieważ już to kiedyś robiłem. Chodzi o to, że z takiej postaci jaką podałem nie da się utworzyć dll i nie wiem jak zmienić ten skrypt w taki sposób aby się dało.

0

No przede wszystkim metoda, którą chcesz wołać z SQL musi być publiczna i opatrzona atrybutem: [Microsoft.SqlServer.Server.SqlProcedure]. No, a jeśli chcesz, żeby przyjmowała jakieś parametry, to musisz je dopisać. Jak do zwykłej metody, tu nie ma nic nietypowego akurat.

0

Dobra zadziałało, ale teraz mam inny problem, muszę zrobić to usuwanie plików w taki sposób aby pliki były usuwane z poziomu Power Shell a nie poprzez Wiersz Polecenia, ktoś może spotkał się z podobnym problemem i wie jak to zrobić??

1 użytkowników online, w tym zalogowanych: 0, gości: 1