Oggi, complice un pomeriggio un po' fiacco, ne ho approfittato per completare l'opera, ho definitivamente migrato tutte le applicazione che ho in sviluppo verso il fx 2.0 e VS2005, finalmente non ce la facevo più :-D

Fondamentalmente tutto e filato abbastanza liscio a parte qualche magagna con P/Invoke e naturalmente con il mio "amico" Crystal Report (maledetto lui...).

Per chiunque si trovasse di fronte alla stessa sistuazione e avesse un semplice metodo che imposta le fatidiche "ConnectionInfo" e "TableLogonInfo" al fine di poter switchare da un db ad un altro senza piangere in cinese... cominci a piangere perchè smette clamorosamente di funzionare... maledizione!

Quello che facevo fino ad oggi era "semplicemente" questo:

protected string ParseDBObjectName( string name )
{
    if( name.IndexOf( " " ) != - 1 || name.IndexOf( "." ) != - 1 )
    {
        if( !name.StartsWith( "[" ) )
        {
            name = "[" + name;
        }

        if( !name.EndsWith( "[" ) )
        {
            name = name + "]"
        }
    }

    return name;
}

protected void ApplyLogOnInfo( ReportDocument rpt, ConnectionInfo ci )
{
    foreach(Table tb in rpt.Database.Tables)
    {
        TableLogOnInfo loi = tb.LogOnInfo;
        loi.ConnectionInfo = ci;
        tb.ApplyLogOnInfo( loi );

        if( tb.TestConnectivity() )
        {
            if( tb.Location.IndexOf(".") > 0 )
            {
                tb.Location = this.ParseDBObjectName(
                            tb.Location.Substring(tb.Location.LastIndexOf( "." ) + 1 )
                            );
            }
            else
            {
                tb.Location = this.ParseDBObjectName( tb.Location );
            }
        }
    }
}

public void ApplyLogOnInfo()
{
    ConnectionInfo ci = new ConnectionInfo();

    ci.ServerName = this.ServerName;
    ci.DatabaseName = this.DatabaseName;

    this.ApplyLogOnInfo( this.Report, ci );

    foreach( ReportObject obj in this.Report.ReportDefinition.ReportObjects )
    {
        if( obj.Kind == ReportObjectKind.SubreportObject )
        {
            SubreportObject subObj = ( SubreportObject )obj;
            ReportDocument subRpt = this.Report.OpenSubreport(
                                                                                subObj.SubreportName );
            this.ApplyLogOnInfo( subRpt, ci );
        }
    }
}

tutto ciò non fa altro che applicare in maniera ricorsiva su tutti gli oggetti (report e subreport) presenti nel report le stesse ConnectionInfo e TableLogonInfo, bene tutto ciò non funziona più, o meglio non produce il risultato atteso... all'inizio semplicemente panico... :-D

Poi studiando un po' il problema e i soliti comprensibilissimi errori di CR, ma questi alla versione 11 o quel che è non hanno ancora capito nulla..., sono giunto alla soluzione decisamente banale :-S

public void ApplyLogOnInfo()
{
    ConnectionInfo ci = new ConnectionInfo();

    ci.ServerName = this.ServerName;
    ci.DatabaseName = this.DatabaseName;
    ci.IntegratedSecurity = true;

è comparsa una nuova proprietà che non esisteva nella versione per il fx 1.1, naturalmente il suo valore di default, come mi sembra ovvio, è "false"...

Tutto è bene quel che finisce bene :-D

.m