Posts

Posts uit 2009 tonen

[C#] Web.config aanpassen in code

Soms is het nodig om in de web.config een sectie te wijzigen. Een manier om een waarde van een sectie (of xml node) te wijzigen is om web.config in te lezen en dan aanpassen met XML objectecn. Een andere manier, die hier wordt besproken, is door gebruik te maken van Configuration classes. Onderstaand volgt een voorbeeld hoe je een waarde kunt aanpassen in de appSettings sectie. private void UpdateConfig( string strKey, string strValue) { Configuration objConfig = WebConfigurationManager.OpenWebConfiguration("~"); AppSettingsSection objAppsettings = (AppSettingsSection)objConfig.GetSection("appSettings"); if (objAppsettings != null ) { objAppsettings.Settings[strKey].Value = strValue; objConfig.Save(); } } bron: http://www.codeguru.com/csharp/.net/net_asp/miscellaneous/article.php/c13663/

[Visual Studio 2005/2008] Mapnaam project veranderen binnen solution

Als je binnen een solution de fysieke mapnaam wilt wijzigen, kan dit niet zomaar binnen visual studio. Je kan wel de projectnaam e.d. wijzigen, maar de mapnaam op de harde schijf wordt nee mee gewijzigd. Een van de manieren om de mapnaam te wijzigen is als volgt: - Sluit de solution in visual studio - Verander de mapnaam op de harde schijf - Open je solution weer en negeer alle foutmeldingen - Klik nu op je project waarvan je de mapnaam heb gewijzigd - Klik in het property venster op File path en blader naar de (nieuwe) locatie bron: http://stackoverflow.com/questions/211241/how-do-i-rename-a-project-folder-from-within-visual-studio/224788#224788

[C#] Data link scherm weergeven (udl window)

Afbeelding
Om in een Windows applicatie de gebruiker een database aan te laten geven, kan je ervoor kiezen om dit te laten doen via het Data link schermpje: Via deze interface kan de gebruiker op eenvoudige wijze een verbinding maken met een database. Het is mogelijk dit scherm vanuit je code aan te roepen en de connection string die hij genereert op te halen. Dit gaat als volgt. Als eerste moeten er references worden toegevoegd aan je project. Deze zijn: In het .NET tabblad: - ADODB In het COM tabblad: - Microsoft OLE DB Service Component 1.0 Type Library Nadat de references zijn toegevoegd, kan met de volgende code het scherm worden getoond en de connection string worden opgehaald: ADODB.Connection adodbConnection = new ADODB.Connection; object connection = (object)adodbConnection; MSDASC.DataLinks dl = new MSDASC.DataLinks; dlg.PromptEdit(ref connection); De connection string kan nu worden opgevraagd met: MessageBox.Show(connection.ConnectionString); Indien reeds een connection string bekend i

[C#] ToString() parameters

Met de toString() methode kan de format opgegeven worden: Datum Format Character Associated Property/Description d ShortDatePattern D LongDatePattern f Full date and time (long date and short time) F FullDateTimePattern (long date and long time) g General (short date and short time) G General (short date and long time) m, M MonthDayPattern r, R RFC1123Pattern s SortableDateTimePattern (based on ISO 8601) using local time t ShortTimePattern T LongTimePattern u UniversalSortableDateTimePattern using the format for universal time display U Full date and time (long date and long time) using universal time y, Y YearMonthPattern Overig Format Pattern Description d The day of the month. Single-digit days will not have a leading zero. dd The day of the month. Single-dig

ASCII, ANSI en Unicode

De Basis In de computer worden letters gerepresenteerd door numerieke codes. Als de computer een code van 100 (decimaal) tegenkomt, dan representeert dat een kleine 'd'. Er bestaat alleen nog wel onduidelijkheid over de code 250 en hier bestaat dan nogal wat wrijving. ASCII en ANSI Voor de Windows generatie, DOS gebaseerde systemen maakte gebruik van de ASCII karakterset (charset). Deze karakterset is een 7-bit standaard die bestaat sinds eind 1950. Het definieert 128 verschillende karakters, wat meer dan genoeg is voor het Nederlands of Engels: klein- en hoofdletters, punctuaties, nummers, control codes (control-c) en niet printbare codes zoals tab, return en backspace. Windows 3.x en later maken gebruik van de ANSI (American national Standards Institute) karakterset, welke 128 "uitgebreide" of bijkomende karaketers toevoegd. In de meeste ANSI fonts is bijvoorbeeld het uitgebreide karaketer (C) (copyright symbool) toegevoegd. ASCII en ANSI zijn goed te gebruiken zo

[SQL Server] varchar vs nvarchar

Bij het maken van een tabel in SQL Server 2008 heb je de mogelijkheid om een veld van het type varchar of nvarchar te voorzien. Wat is nu eigenlijk het verschil? Het verschil zit hem in het volgende: varchar Varchar heeft een maximum van 8000 tekens. Er wordt 1 byte per teken gereserveerd en wordt gebruikt om ASCII en ANSI in op te slaan. nvarchar Nvarchar neemt twee keer zoveel ruimte in als varchar. Dit komt omdat per teken twee bytes wordt gereserveerd en daarom kunnen er 4000 tekens worden opgeslagen. Dit type wordt gebruikt bij Unicode. Dus stel dat je een klantensite heb met invoerveleden waar wereldwijd gebruik van wordt gemaakt dan moet je gebruik maken van nvarchar. (n)char En dan is er ook nog (n)char. Deze string wordt opgevuld met spaties totdat de opgegeven lengte is bereikt.

[C#] Class serialiseren en deserialiseren

Enkel even een code dump deze keer: public void Serialize(Configuration c) { XmlSerializer serializer = new XmlSerializer( c.GetType() ); StreamWriter streamwrite = new StreamWriter("config.xml"); serializer.Serialize(streamwrite, this); streamwrite.Close(); } public static Configuration Deserialize() { FileInfo file = new FileInfo("config.xml"); if (file.Exists) { StreamReader reader = new StreamReader("config.xml"); XmlSerializer ser = new XmlSerializer(typeof(Configuration)); Configuration c = (Configuration)ser.Deserialize(reader); reader.Close(); return c; } else return null; }

[C#] Levenscyclus ASP.NET pagina

Bij het laden van een ASP.NET pagina treden er verschillende events op. Stap 1: Genereer de gecompileerde class De eerste stap van de levenscyclus is het genereren van een gecompileerde class die de aangevraagde pagina voorsteld. Zoals je weer bestaat een ASPX pagina uit een combinatie van een HTML en Server controls. Een dynamisch gecompileerde class is gegenereerd dat deze ASPX pagina representeerd. Deze gecompileerde class wordt dan opgeslagen in de "Tijdelijke ASp.NET bestanden" map. Zolang de ASPX pagina niet wordt aangepast worden toekomstige aanvragen voor deze ASPX pagina aangeboden door dezelfde gecompileerde class. Deze gecompileerde class bevat eigenlijk de geprogrammeerde definitie van de controls die zijn gedefinieerd op de ASPX pagina. PreInit(nieuew in ASP.NET 2.0) De levenscyclus van een pagina begint met het PreInit event. Dit is het enige event waar toegang (via code) tot master pages en themes zijn toegestaan. Dit event is niet recursief, dit betekent dat e

[C#] ViewState

Wat doet ViewState: Slaat waarden op per control, zoals een hashtable. Volgt veranderingen van een ViewState's geinitialiseerde status Serialiseert en deserialiseert opgeslagen data in verborgen form fields op de cliënt Zet automatisch de ViewState waarden waarden terug bij postbacks. 1. De ViewState slaat waarden op per control ViewState slaat waarden op zoals een hashtable dat ook doet. De ViewState heeft een index die bereikbaar is via een key van het type string. De index accepteert elk object als waarde: ViewState["Key1"] = 123.45am; // slaat een datum op ViewState["Key2"] = 132;// slaat een integer op ViewState["Key3"] = "hello world!"; // slaat een string op Eigenlijk is ViewState gewoon maar een naam. ViewState is een protected property die is gedefinieerd in de System.Web.UI.Control class. Hiervan erven alle controls zoals server controls, user controls en pages. Het type van de property is System.Web.UI.StateBag. Strict gesproken he

[C#] Object initialiseren binnen ListView

Om asp controls te benaderen die in je ListView zitten kan je deze niet benaderen zoals je gewend bent. Stel dat er in de ListView staat met als name lblDate, dan kan je deze in de codebehind niet als volgt aanspreken: lblData.Text = "Datum";. Dit komt omdat alle controls pas benaderbaar zijn nadat de DataBound heeft plaatsgevonden. Om lblData toch te kunnen benaderen kun je dit door het OnInt event aan te roepen: En in de codebehind: protected void lblDate_OnInit(object sender, EventArgs e) { ((Label)sender).Text = "Datum"; } Op deze manier wordt de text toch nog gezet en hoef je niet te loopen of findcontrol te gebruiken. Zelf vind ik dit de netste manier. Voor meer info: http://blogs.msdn.com/scothu/archive/2008/03/26/accessing-controls-in-listview-templates.aspx

[C#] Overerving of inheritance

Even wat basis aspecten over overervering (inheritance) in C#. Onderstaande code even om een beeld te krijgen hoe het ook alweer zat. Het is heel basis en vereist geen verdere uitleg denk ik: public class Parent { private string _waarde; public Parent(string waarde) { _waarde = waarde; Response.Write("Parent constructor MET parameter "); } public Parent() { _waarde = "default;"; Response.Write("Parent constructor zonder parameter"); } public void Print() { Response.Write(_waarde); } } public class Child : Parent { public Child() { Response.Write("Child constructor zonder parameter"); } } // Create en initialize Child object: Child child = new Child(); child.Print(); // Uitkomst Parent constructor zonder parameter Child constructor zonder parameter default Maar hoe zat het ook alweer als je nou de constructor van de parent aan wil roepen vanuit de Child? En hoe roep je nou methods aan vanuit de Child van de Parent? En hoe overschrijf j

[IIS] Site wordt niet geparsed / aangeroepen / geladen

Als je een site in IIS heb gehangen en hem vervolgens wilt benaderen en je krijgt de volgende (soortgelijke) melding: [Stacktrace] [NullReferenceException: Object reference not set to an instance of an object.] System.Web.Hosting.ISAPIWorkerRequestInProc.GetServerVariable(String name) +349 System.Web.Hosting.ISAPIWorkerRequest.ReadRequestHeaders() +95 System.Web.Hosting.ISAPIWorkerRequest.GetKnownRequestHeader(Int32 index) +55 System.Web.HttpRequest.get_UserLanguages() +33 System.Web.HttpContext.UserLanguageFromContext() +32 System.Web.HttpContext.CultureFromConfig(String configString, Boolean requireSpecific) +75 System.Web.ThreadContext.SetRequestLevelCulture(HttpContext context) +8767807 System.Web.ThreadContext.Enter(Boolean setImpersonationContext) +247 System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext) +42 System.Web.ApplicationStepManager.ResumeSteps(Exception error) +120 Dan heb je waarschijnlijk IIS geïnstalleerd nadet je het .NET Framew

Emails versturen met Redemption (RDO)

Met RDO (Redemption Objects) is het mogelijk om mails, afspraken, taken e.d. te versturen zonder daarbij Outlook te gebruiken. Dit doe je namelijk door direct de Exchange server aan te spreken. Voor je gebruik kunt maken van RDO moet je eerst even de assembly downloaden (http://www.dimastr.com/redemption/). Nadat je heb hem gedownload heb, even installeren in als reference toevoegen in je Visual Studio project. Dit blog is meer bedoeld om wat achtergrondinformatie te verkrijgen over het Outlook object model waar RDO op gebaseerd is / gebruik van maakt. Eerst maar even wat kreten nader uitleggen: MAPI Staat voor Messaging Application Programming Interface en is in samenwerking met meer dan 100 ontwikkelaars tot stand gekomen. MAPI is object georienteerd en gebruikt Microsofts Component Object Model (COM) om instanties te laten maken van objecten. Service Providers Dit zijn is de backend van een messaging systeem. Client applicaties maken gebruik van service providers om berichten (messa

Visual Studio 2008 Setup Web Project

Om je ontwikkelde website uit te rollen kan je gebruik maken van het projecttype Setup Web Project. Als dit project eenmaal is aangemaakt kan je verschillende 'output groups' selecteren: Primary output Localized resources Debug symbols Content files Source files Documentation files XML Serialization Assemblies Primary output Dit zijn de gecompileerde assemblies in de bin map. Dit zijn dus de gecompileerde .cs bestanden Localized resources Dit zijn de bestanden die in je project in de map App_GlobalResources zitten. Hier zitten bijvoorbeeld de .resx bestanden in die de vertalingen verzorgen. Debug symbols Deze moet ik helaas verschuldigd blijven. Heeft natuurlijk iets met debuggen te maken (breakpoints info?) Content files Dit zijn de aspx bestanden. Source files Dit zijn de .cs bestanden Documentation file Deze moet ik ook verschuldigd blijven. XML Serialization Assemblies Wederom weet ik niet wat deze inhoud. Meer informatie op: http://weblogs.asp.net/scottgu/archive/2007/06/1

[C#] Excel bestand inlezen

Toelichting connectionstring: HDR: Header. Geeft aan of de eerste regel de headers bevat IMEX: Geeft alles terug as datatype string Toelichting ophalen data: In de query: [import$]: De naam van het tabblad (sheet). OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=pad/naar/xls; Extended Properties=\"Excel 8.0;HDR=yes;IMEX=1\""); OleDbDataAdapter da = new OleDbDataAdapter("select * from [Import$]", con); DataTable dt = new DataTable(); da.Fill(dt); foreach(DataRow dr in dt.Rows) { Response.Write("# " + dr["vraagnummer"]); }

[AJAX] aanroep met POST methode

Een POST request is bijna hetzelfde als het aanroepen van een pagina met een GET methode. Bij een POST methode moet je alleen wel even op de volgende twee punten letten: Maak gebruik van de setRequestHeader property. Geen de parameters aan via de send methode. Voor de volledigheid hier nog even een uitgewerkt voorbeeldje: function Save(page, groupId) { // Create xmlhttp object var xmlhttp = CreateHttpObject(); // methode die een xmlhttp object maakt var param = "groupId=" + groupId; xmlhttp.open("POST", page, true); xmlhttp.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' ); xmlhttp.send(param); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { document.getElementById('info').innerHTML = xmlhttp.responseText; } } } Let er wel op dat de setRequestHeader vóór de Send method wordt geplaatst, anders onstaat er een exception.

[C#] Verschil NameValueCollection en Hashtable

De Hashtable en NameValueCollection zijn beide collections die werken met het key - value principe. Toch zijn er een paar verschillen: Een NameValueCollection kan bij een key meerdere waarden hebben. Dit is bij een hashtable niet mogelijk. Bij een hashtable is maar één paar van key - value mogelijk. Bij het opvragen van een key in een NameValueCollection die meerdere waarden bevat, wordt deze kommagescheiden teruggegeven. De hashtable collectie is sneller dan de NameValueCollection omdat deze gebruik maakt van het hashtable algoritme. Dit zorgt ervoor dat de data sneller wordt opgehaald. De NamevalueCollection kan enkel strings bevatten.

[AJAX] Introductie

Properties van het XMLHttpRequest object Het XMLHttpRequest object Om gebruik te kunnen maken van de AJAX techniek moet er een XMLHttpRequest object zijn aangemaakt. Via dit object kunnen aanvragen verstuurd worden naar de server, maar bevat het ook de data die wordt teruggestuurd van de server. Het object kan op de volgende wijze worden aangemaakt: var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else if (window.ActiveXObject) { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } else { alert("Your browser does not support XMLHTTP!"); } } onreadystatechange property Nadat het verzoek is verstuurd naar de server, is er een functie nodig die de data ontvangt van de server. De onreadystatechange property bevat de functie die de data (afkomstig van de server) verwerkt. De functie is opgeslagen in de property en wordt automatisch aangeroepen. Voorbeeldcode: xmlhttp.onreadystatec

[Javascript] Geluid afspelen

Html code: < src="Sound/success.wav" autostart="false" name="sound1" enablejavascript="true" style="display: none;" width="0" height="0"> < / embed> Javascript: function EvalSound(soundobj) { var thissound = eval("document." + soundobj); thissound.Play(); }

[Auto] Audi A3 uitvoeringen

De Audi A3 is er in de volgende uitvoeringen: Attraction: basis model Ambition: sportieve model (sportzetels, sportophanging, 17" velgen, sportieve versnellingspook) Ambiente: luxe model (set opties maar meer gericht op comfort dan op sportiviteit) De modellen zijn als volgt te herkennen: Attraction: Zwart plastic inleg in de deuren, geen lederen stuurwiel, klein BIS Ambition: Sportstoelen, alu inleg, groot BIS, zonnescherm achterin, mistlampjes. Ambiente: Automatische verlichting, regensensor, ambiente verlichting (lichtpakket), houten inleg (kan ook alu zijn zoals in mijn auto), groot BIS, opbergnetten.

[C#] Base64 afbeelding tonen

protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "image/gif"; byte[] b = Convert.FromBase64String("R0lGODlhIgAgAMQfANnl2cjZx6OxornEuOPs45iml4mYifP28+nx6UtVS9fd12t3a3yJfLjQuKvFqsXNxMHWwVVgVb7TvSkvKczfyzlAOd3p3s/izdDYz2BtYMvdzNHg0bPMskFKQbK7sv///yH5BAEAAB8ALAAAAAAiACAAAAX/4CeOZGmeaKqu6SEIXiwMB/l4AGsWiqX8ioGh9nlgFC+i7jM8OJ0IhudzMCCuQoFlySBcv4PIFIkgmAmPQkGZMlgOX8Ig8/ggCmWL3gKQsgoPcQQABgJBDwR8AAAaBQl1KzFXZxYEMRhmAIoQDAkELAp4Z6N5ihsbAwsJKpAfDHkAAQMeAxiLAKcbFx4RDCgHgAYYaWUAA50VCQYeAbm6HsonwFAegQgWqRPKnQsDGhcYGhQC0Sa0X3EbBhULIwcLDBAUFAEa5FMm7wIFzHoADws6sCHAgIKGAAgdZBjwK0KHDgweLJrjqwSDeggDSHDAQM2aEsAKMGiwiFNFEgY0/2iAwBJCAJeyTpaIYeHUHDYWBMRi2aCnBJYKW41Q4MFUAAYnPRh4sEHjRgMMDBQwkKEDBhMCMPCZNy4DPkBNJYgV4LBDgg4TIuQzQOAUhQsSDCTI8eGFxp4NClTAkaFCBjYiHjyoeeHgsQQIRHgoAAFv3g74FEhzg4teAAeqiFgw0LgnhwKQVQwYfDAjWbUiDsTz/DkBPhTVmiKEIEFA6BEjG3DYLSCDgRQIdDZlKRb0ayYOdDtYzgD1CQMI1QhwsNvAbRGFOCxfbiDClhMLIkwYnyAD0r7H92nf3l2ytBiLq1YYX8G9YqkGpAroLlTFA

Afbeeldingen uploaden en bekijken via database

protected void Button1_Click(object sender, EventArgs e) { try { int len = image.PostedFile.ContentLength; string path = "C:\\"; string filename = image.PostedFile.FileName; image.SaveAs(path + filename); FileInfo imageInfo = new FileInfo(path + filename); byte[] content = new byte[len]; image.PostedFile.InputStream.Read(content, 0, len); SqlConnection objConn = new SqlConnection(); SqlCommand objCom = new SqlCommand(); objConn = new SqlConnection(""); objCom = new SqlCommand("UPDATE tbl SET Afbeeldingpad = @Picture WHERE InstellingID = 1", objConn); SqlParameter pictureParameter = new SqlParameter("@Picture", SqlDbType.Image, len); pictureParameter.Value = content; objCom.Parameters.Add

[PHP] Ini variabelen configureren in PHP

Php.ini bevat heel wat instellingen voor PHP. Soms is het nodig om wat waarden aan te passen in dit bestand. Dit is alleen niet altijd mogelijk, tenzij je zelf de webserver beheert. Een lijst met instellingen die kunnen worden aangepast is hier te vinden . De aanpassingen gebeuren met de PHP functie ini_set() . Een (in mijn ogen irritante) eigenschap is dat mijn errors niet worden getoond. Ik moet hiervoor naast Error_reporting ook ini_set('display_errors', 1) gebruiken. Nu worden pas alle errors en waarschuwingen getoond. Overigens na de uitvoering van het script worden alle waarden die gezet zijn via ini_set() weer hersteld naar de originele waarden zoals deze bekend zijn in php.ini.

[PHP] Sessions

Van de week weer iets geleerd over hoe sessies werken in PHP. Ik wist al dat sessies cookies zijn die worden opgeslagen op de server. Wat ik niet wist dat hiervoor ook een cookie wordt geplaatst bij de client. Dit cookie bevat namelijk het sessie id. Deze sessie id corrospondeert met het cookie dat is opgeslagen op de server. Op deze manier weet de server welke sessie bij welke client hoort. Zodra cookies dus zijn uitgeschakeld bij de client, of het lukt de server niet om een cookie te plaatsen, werken sessies dus ook niet. Hier nog wat handige sessie functies van PHP: session_get_cookie_params() sessie configurtaties session_set_cookie_params() session_id() session_name()

[IIS] Firefox en IIS Windows security

Als in IIS integrated security aanstaat en anonieme toegang niet toegestaan is, wordt in Firefox een dialoogvenster getoond waarin je een gebruikersnaam en wachtwoord moet opgeven. Dit is echter niet het geval bij Internet Explorer. In Firefox kan dit 'probleem' als volgt worden opgelost: 1. Typ in de adresbalk in about:config 2. Je krijgt een melding (firefox 3 en hoger) en druk op de button 3. Typ in de balk network.automatic 4. Dubbelklik op network.automatic-ntlm-auth.trusted-uris 5. Voer hier het adres in. Meerdere adressen kunnen komma gescheiden worden ingevoerd (www.domain.nl, http://localhost/) 6. Sluit het tabblad