# Trascorrere il giorno di codifica...(e .NET 1.0.3705.352 bug!)

<datetime class="hidden">2004-02-29T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, .NET, Database, Software Development -->
Sto lavorando... hmm... ho pensato di menzionare un insetto molto strano che mi sono imbattuto ieri al
lavoro - che mi aveva perplesso per circa un giorno e mezzo...

Avevo scritto una domanda (il Portale di cui ho parlato prima - [La
Comunità dell'istruzione](http://www.theeducationcommunity.com)), che utilizza il [Dati
Blocco applicazione accesso](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp)per fornire il DAL - che consiglio vivamente.
Questo è sempre stato impeccabile su ogni piattaforma su cui l'ho provato. Il codice è sotto...

```
    string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    string exceptionStr=exception.ToString() + exception.StackTrace;
    SqlParameter[] sqlParams = new SqlParameter[4]; SqlParameter
    prmUser = new SqlParameter("@user",SqlDbType.VarChar,500);
    prmUser.Value = user;
    SqlParameter prmMessage = new SqlParameter("@exceptionMessage",
    SqlDbType.VarChar, 2000);
    prmMessage.Value = exception.Message;
    SqlParameter prmExStr = new SqlParameter("@exception",SqlDbType.Text);
    prmExStr.Value = exceptionStr;
    SqlParameter prmPortalId = new SqlParameter("@portalId",SqlDbType.SmallInt);
    prmPortalId.Value = 0; sqlParams[0] = prmUser;
    sqlParams[1] = prmMessage;
    sqlParams[2] = prmExStr; 
    sqlParams[3] = prmPortalId;
    /*SqlHelperParameterCache.GetSpParameterSet(_connectionString,"pr_Admin_InsertError");  sqlParams[0].Value
    = user;  sqlParams[1].Value = exception.Message;  sqlParams[2].Value
    = exceptionStr;  //sqlParams[2].Value = "Test String";  sqlParams[3].Value
    = ((PortalSettings)HttpContext.Current.Items["PortalSettings"]).PortalId;*/ 
    SqlHelper.ExecuteNonQuery(_connectionString,CommandType.StoredProcedure,"pr_Admin_InsertError",sqlParams);
```

Uso un metodo che fornisce chiamato SqlHelperParameterCache.GetSpParameters (commentata
out in the code above) - questo fondamentalmente solo popola una serie di SqlParameters con
i parametri restituiti dal DB - salva un po 'di codifica e rende l'app più facile
per aggiornare come il SP cambia - bello!

In ogni caso, questo ha funzionato senza difetti, veloce, efficiente tutto questo! Fino a quando non è, io
ho cercato di distribuire nel nostro ambiente di prova giovedì - ho continuato a ricevere vari errori,
Errore grave e errore di rete generale indietro da SQL Server 2000 quando ho cercato di eseguire
Beh, la versione di .NET su quella macchina era 1.0.3705.352

- una versione che non avevo mai visto e non ho potuto ottenere - ma ho pensato, .NET 1.0 era tutto bello
  più o meno lo stesso, forse qualche bugfixes, ma questo è tutto!

Umm... sbagliato, si scopre che questa versione ha un problema importante quando si tenta di ottenere i parametri
indietro da un SP quando il SP si aspetta un campo di tipo 'testo' - si sbaglia in qualche modo

- e causa questo terribile errore sconcertante. Soluzione, dichiarare esplicitamente i tipi di campo
  per i parametri se il tuo SP contiene un campo 'testo' (solo uno per cui l'ho provato,
  possono interessare più tipi 'binari').

Ad ogni modo, risolto ora - ma vi consiglio di aggiornare a 1.1 - che ha anche un fantastico
cosa ho scoperto da alcuni tizi blog al [ASP.NET
weblogs](http://weblogs.asp.net) semplice ma salva un po 'di digitazione, sembra che DropDownList (Mi aspetto
RadioButtonList ha anche, ma non provato!) che è una proprietà SelectedValue -
quanto è fresco - beh, non così forte, ma è meglio che fare il vecchio ddl.SelectItem.Value...bit
Piu' corti...