# Spendera dagen kodning... (och .NET 1.03705.352 bugg!)

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

<!-- category -- mostlylucidcouk, Imported, .NET, Database, Software Development -->
Jag jobbar... Mmm ... tänkte jag skulle nämna en mycket udda bugg jag stötte på igår på
arbete - som fick mig förbryllad för ungefär en och en halv dag ...

Jag hade skrivit en ansökan (portalen jag nämnt tidigare - [och
Utbildningsgemenskapen](http://www.theeducationcommunity.com)), som använder sig av [Uppgifter
Block för åtkomstprogram](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp)för att tillhandahålla DAL - som jag rekommenderar starkt. Hur som helst,
Det här har alltid varit felfritt på alla plattformar jag provat det på.

```
    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);
```

Jag använder en metod som det ger kallas SqlHelperParameterCache.GetSpParameters (kommentar
ut i koden ovan) - detta i princip bara befolkar en rad SqlParameter med
parametrarna som returneras från DB - sparar lite kodning och gör appen enklare
att uppdatera som SPs förändras - trevligt!

Det här har fungerat felfritt, snabbt och effektivt.
Försökte att sätta in i vår testmiljö på torsdag - Jag fortsatte att få olika fel,
Svårt fel och allmänt nätverksfel tillbaka från SQL Server 2000 när jag försökte köra
den kommenterade koden ovan. Tja, versionen av .NET på den maskinen var 1.03705.352

- en version jag aldrig sett och inte kan få - men jag antog, .NET 1.0 var alla vackra
  I stort sett samma sak, kanske några buggfixar men det är allt!

Umm ... fel, visar sig att denna version har ett stort problem när du försöker få parametrarna
tillbaka från en SP när SP förväntar sig en "text" typfält - det bara får det fel på något sätt

- och orsakar detta fruktansvärda, förbryllande fel. Lösning, uttryckligen deklarera fälttyper
  för parametrarna om din SP innehåller ett "text"-fält (endast ett jag provat det för,
  kan påverka fler "binära" typer).

Hur som helst, fast nu - men jag rekommenderar dig att uppgradera till 1.1 - som också har en fantastisk
något jag upptäckte från några killar blogg på [ASP.NET
webbloggar](http://weblogs.asp.net) enkel men sparar lite av skriva, verkar som DropDownList (Jag förväntar mig
RadiobuttonList har det också, men inte provat det!) som är en SelectedValue egendom -
Hur coolt är inte det - väl inte så coolt, men det är bättre än att göra den gamla ddl.SelectedItem.Value...bit
kortare...