VB.net-MS SQL query file   zodpovězená otázka

VB.NET

Zdravím, chtěl jsem se zeptat, jestli existuje možnost, jak ve VB.net spustit MS SQL query file? Aby to provedlo to samé jako když ho otevřu v MS server management studio express a kliknu na execute.

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

No obsah toho SQL skriptu přece můžete provést klasicky pomocí ADO.NET, konkrétně přes SqlCommand. Pokud to chcete mít z nějakého důvodu v souboru, tak není problém to z něj načíst.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Já to řeším tak, že mam v projectu script, který obsahuje třeba vytvoření database. Tento script projedu a poskladám si jednotlivé příkazy. Na konec příkazy pošlu přes OdbcCommand.ExecutenoQuery. Nevim jestli je to nejlepší řešení, ale funguje. Pozor některé věci se musí ošetřit.


    private void CreateKBase()
    {
      StringBuilder sbCreateTrigger = new StringBuilder();
      String Path = AppDomain.CurrentDomain.BaseDirectory + @"Database";
      string sline = string.Empty;
      int iValue = 0;

      ArrayList Files = new ArrayList();

      try
      {
        Files.AddRange(System.IO.Directory.GetFiles(Path));

        foreach (string sfile in Files)
        {
          StreamReader sr = new StreamReader(sfile);
          sbCreateTrigger = new StringBuilder();
          iValue = 0;

          while (sr.EndOfStream == false)
          {
            sline = sr.ReadLine();
            if (sline == "GO" && sline.Length > 0)
              UDA.ExecuteCommand(sbCreateTrigger.ToString());
            else if (sline != "GO")
              sbCreateTrigger.Append(" " + sline);

            if (sline == "GO")
              sbCreateTrigger = new StringBuilder();
          }
        }
      }
      catch (Exception ex)
      {
        throw new Exception(ex.Message);
      }
    }

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To poskládání máte úplně špatně. Co třeba následující (validní) skript?

select 1

 go

select 2

Go

select 3

gO

Úloha jak vyšitá pro regulární výrazy.

Regex.Split(SQL, "\sgo\s", RegexOptions.IgnoreCase) a nenačítat po řádcích

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

Já netvrdím, že je to poskládaný dobře pro moje účely stačí a funguje. S Regex nemám, ještžě takové zkušenosti, ale zjistil jsem že je tu o něm článek, tak až budu mít čas tak se na něj kouknu.

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