# NPRG038 11.6.2012

<{ForumPost(poster="deusex", timestamp=2012-06-11 16:25:41)}>
1. Mějme ve WinForms tri elementy:

    * Button
    * Label
    * TextBox

pri kliku na button vezmete obsah textboxu a zavolejte dotaz:

    SELECT COUNT(*) FROM Employees WHERE City = "Obsah textboxu"

takze jen vedet jak pripravit statement (nesmite dosazovat primo, kvuli SQL injenction), spustit (hodi se metoda ExecuteScalar u IDbCommand, vrati prvni pole prvniho radku, coz je presne obsah COUNT(*) :))
1. Nejaka c++ x86 knihovna a c# x86 assembly, u c++ byly funkce definovany s Ckovou volaci konvenci (ja netusim co to je, tak jen pro informaci)  
Otazky typu:

    * Zavisi beh programu na Is64BitOperatingSystem (jeden radek ano, druhy ne)
    * program selze protoze je vychozi volaci konvence v C# stdcall/fastcall/ceckova
    * a neco s platnosti delegatu nastavenho do c++ dllka po tom, co c# sleepuje vterinu
1. Klasicky pripad na LINQ

    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Linq;
    class Program {
      static void Main(string[] args) {
        Numbers n = new Numbers();
        var list = from x in n
    [b]order by x[/b]
                   where x > 1 select x;
        foreach (var i in list) {
          Console.Write(
            "g(" + i.ToString() + ") "
          );
    break;
    } } }
    class Numbers : IEnumerable<int> {
      public IEnumerator<int> GetEnumerator() {
        Console.Write("1 ");
        yield return 1;
        Console.Write("2 ");
        yield return 2;
        Console.Write("3 ");
        yield return 3;
      }
    IEnumerator IEnumerable.GetEnumerator() {
        return GetEnumerator();
    } }

Pozor na order by v LINQu, podle me musi projit cely enumerator (cimz zavola vsechny tri Console Write) a pak vypise ten prvni vetsi nez 1, takze vysledne :

    1 2 3 g(2)

1. CIL instrukce [ldsfld](http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.ldsfld), otazka byla kam nahraje data (managed GC heap, heap OS, tam kde jsou lokalni, tam kde parametry metod, etc..) // odpoved nevim
1. Pro odlehceni pripad z ukazkove zkousky letosni: [http://d3s.mff.cuni.cz/~jezek/UkazkovaZ ... 010-11.pdf](http://d3s.mff.cuni.cz/~jezek/UkazkovaZkouska%20Leto%202010-11.pdf) (cerveny ctverecek) - tentokrat byl porad zeleny - lokalni promenna prebyla Trigger a Style
1. Kam si v ASP.NET uklada data VIEWSTATE a Session, moznosti v kazdem radku:

    * v cookie u klienta
    * jinde u klienta
    * na serveru
1. Co musi splnovat objekt aby byl vzdalene volatelny pres .NET Remoting: **dedit od MarshelRefByObject**{: style="list-style-type:decimal"}

<{/ForumPost}>

<{ForumPost(poster="eldros", timestamp=2012-06-11 16:30:50)}>
Doplnim dvojku, jedna se o [http://www.codeproject.com/Articles/116 ... tions-in-C](http://www.codeproject.com/Articles/11618/Using-C-calling-convention-callback-functions-in-C) (skoda ze se na to clovek nepripravil)  
A u ldstf to za behu zavisi na architekture.
<{/ForumPost}>

<{ForumPost(poster="cre8or", timestamp=2012-06-11 16:46:39)}>
4) v zadani otazky bylo napsano "kam se nahraji za behu aplikace". Spravna odpoved tedy byla, ze zalezi na architekture procesoru (zasobnikovy vs. registrovy).  
6) VIEWSTATE se posila v hidden field klientovi, odpoved tedy "jinde u klienta". Sessions jsou na serveru.
<{/ForumPost}>

<{ForumPost(poster="deusex", timestamp=2012-06-11 17:11:48)}>
u session jsem navic zaskrtl  v cookie, protoze bez ni nejdou identifikovat
<{/ForumPost}>

<{ForumPost(poster="stateless", timestamp=2012-06-11 18:31:01)}>
Tak abychom to tu měli komplet:  
  
2) Správně bylo  
- program selže protože výchozí volací konvence v C# je stdcall (céčková je cdecl)  
- delegát nemusí být platný, protože mohl být během pauzy zgarbagecollectován (protože jediná C#-ová reference na něj vznikla uvnitř té metody, co ho nastavovala)  
- nezávisí to na Is64BitOperatingSystem, protože je to prostě všecko zkompilováno pro x86 a není co řešit  
  
1) Netušil jsem, jak se pracuje s databázema, tak jsem napsal zhruba:

    var table = dbConnection.GetTable("Employee"); // to jsem si vymyslel
    string city = textBox1.Text;
    var q = from x in table
            where x.City == city
            select x;
    int count = q.Count();
    label1.Text = count.ToString();
    

 A strhnul mi jenom jeden bod ze tří za ten začátek.  
  
Jinak ještě pro potvrzení (zdroj - vyhodnocovací session):  
3, 5, 7 jak píše deusex, 4 a 6 jak píše cre8or
<{/ForumPost}>

