Archivi tag: VB.NET

Parsing dei parametri C# e VB.NET

Dovete realizzare una applicazione console in ambiente .Net, con parametri in riga di comando? Non perdete tempo a creare routine custom per verificare la presenza dei parametri, lasciate fare tutto a CommandLineParser. L’installazione è semplice da NuGet. Basta fornire una classe modello con gli opportuni metadati e richiamare il parser, in output otterrete l’oggetto con i valori dei parametri popolati.

Ad esempio:

using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Threading;
using CommandLine;

namespace TxtTrasformation
{
    internal class Program
    {
        public class Options
        {
            [Option('f', "FilePath", Required = true, HelpText = "Inserisci il nome file da elaborare")]
            public string  FilePath { get; set; }
        }
        private static void Main(string[] args)
        {
            Parser.Default.ParseArguments<Options>(args)
                   .WithParsed<Options>(o =>
                   {
                       ElaboraFile(o.FilePath);
                   });
        }
        static void ElaboraFile(string filein) {
            Stopwatch sw = new Stopwatch();
            sw.Start();
/*
Elaborazione...
*/
            sw.Stop();

        }
    }
}

La classe Options definisce un parametro obbiligatorio “f” di tipo testo. Se il parsing dei parametri fallisce, viene automaticamente visualizzata la schermata di riepilogo dei parametri. In alternativa si può gestire l’errore nella funzione:

.WithNotParsed((errs) => HandleParseError(errs));

Impossibile attivare i vincoli. Una o più righe contengono valori che violano il vincolo non-null, unique o foreign-key.

Quando si ha a che fare con i dataSet o dataTable tipizzati, si può ricevere l’errore (all’atto della select):

“Impossibile attivare i vincoli. Una o più righe contengono valori che violano il vincolo non-null, unique o foreign-key.”

o anche la sua versione inglese

“Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints”

Senza nessun’altra indicazione. Ma c’è un modo per sapere qual’è la colonna in errore e qual’è esattamente la violazione. Basta iterare sulla collezione GetErrors, presente sul datatable. Ad esempio (VB.NET):

Try
   Me.Adapter.Fill(dataTable)
Catch ex As Exception
   Dim err As DataRow() = dataTable.GetErrors
   Dim msg As New StringBuilder
   For Each e In err
       msg.AppendLine(e.RowError)
   Next
End Try

In questo modo la variabile msg conterrà tutte le colonne con un errore e il tipo di errore.