niedziela, 24 czerwca 2012

PL/SQL Oracle wprowadzenie

Język PL/SQL jest językiem stosowanym w bazach firmy Oracle.
Stosuje się go z kilku przyczyn:
  • niektóre zapytania SQL łatwiej w nim wyrazić
  • duża wydajność 
  • dostępne mechanizmy, których normalnie brakuje w zwykłym SQLu
    • stałe, zmienne
    • struktury sterujące
    • wyjątki
  • w przypadku używania baz Oracle kod jest przenaszalny pomiędzy instancjami bazy
  • możliwość tworzenia pakietów funkcji ogólnych, które następnie można wykorzystać w wielu bazach danych
Podstawową jednostką w PL/SQL jest blok anonimowy, który ma następującą postać:

Code:
DECLARE
//stałe zmienne

BEGIN
//instrukcje

EXCEPTION
//obsługa wyjątków

END;


Zmienne
Umożliwiają przechowywanie danych, np. wyników zapytań. Deklarujemy je w sekcji DECLARE. W zależności od potrzeby mamy zmienne:
  • proste - typy podstawowe
  • złożone - rekord, tablica
Można także zadeklarować wartość domyślną dla zmiennej, oraz to czy może ona przyjmować wartości puste - NULL. Kilka przykładów definiowania zmiennych:

Code:
DECLARE
nazwa_zmiennej NUMERIC; //zainicjowanie wartością pustą

nazwa_zmiennej NUMERIC := 10; //zainicjowanie wartością

nazwa_zmiennej NUMERIC := DEFAULT 10; //zainicjowanie wartością //zainicjowanie wartością z określeniem wartości domyślnej

nazwa_zmiennej NUMERIC := DEFAULT 10; //zainicjowanie wartością //zainicjowanie wartością z określeniem wartości domyślnej, nie mogącej przyjąć wartość NULL

Zmienne rekordowe są podobne do rekordów znanych z języków programowania (C++, C# itp). Deklarujemy rekord który może przechowywać kilka różnych typów danych, dostęp do poszczególnych typów odbywa się poprzez ".". Przykład:

Code:
DECLARE
TYPE Osoba IS RECORD
(
Id INT,
Imie VARCHAR2(50),
Nazwisko VARCHAR2(50)
);
jacek Osoba;
BEGIN
jacek.Id := 10;
jacek.Imie := 'Jacek';
jacek.Nazwisko := 'Kowalski';
END


Stałe
Jak można się domyślić są to zmienne którym przypisujemy wartość i jej nie zmieniamy. Deklaracja:

Code:
DECLARE
pi CONSTANT NUMERIC := 3.14;

Dynamiczne dodanie elmentów do Filtru typu ComboBox w Gridzie

Korzystając z RadGrida możemy stworzyć szablon filtrowania dla kolumny. Jeżeli chcemy aby zamiast zwykłego TextBoxa można było wybrać wartość z ComboBoxa bardzo łatwo to osiągnąć.
Zobaczmy na przykład:


Aby zmienić filtr kategorii ze zwykłego TextBoxa na np. ComboBox możemy posłużyć się poniższym kodem:

Code:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadGrid ID="rgProducts" runat="server" DataSourceID="lqProducts"
    AllowPaging="True" PageSize="10" AutoGenerateColumns="False" AllowFilteringByColumn="True"
    EnableLinqExpressions="True" onitemcommand="rgProducts_ItemCommand" onitemdatabound="rgProducts_ItemDataBound" 
    >
        <MasterTableView>
            <Columns>
                <telerik:GridBoundColumn UniqueName="ProductName" SortExpression="ProductName" 
                HeaderText="Nazwa" DataField="ProductName" DataType="System.String" />
                <telerik:GridBoundColumn UniqueName="ProductModel" SortExpression="ProductModel" 
                HeaderText="Model" DataField="ProductModel" />
                <telerik:GridBoundColumn UniqueName="ProductCategoryName" SortExpression="ProductCategoryName" 
                HeaderText="Kategoria" DataField="ProductCategoryName">
                    <%-- 
                    <FilterTemplate>
                        <telerik:RadComboBox runat="server" ID="rcbCategoryName"></telerik:RadComboBox>
                    </FilterTemplate>
                    --%>
                </telerik:GridBoundColumn>
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>
    <asp:LinqDataSource runat="server" ID="lqProducts" 
        onselecting="lqProducts_Selecting"></asp:LinqDataSource>

W code behind umieszczamy następujący kod:

Code:
protected void lqProducts_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            var adventureWorksLt2012Entities = new AdventureWorksLT2012Entities();
            e.Result = adventureWorksLt2012Entities.Products.Select(x => new { x.ProductID, ProductName = x.Name, ProductModel = x.ProductModel.Name, ProductCategoryName = x.ProductCategory.Name }).OrderBy(x => x.ProductID);
        }

        protected void rgProducts_ItemCommand(object sender, GridCommandEventArgs e)
        {
        }

        protected void rgProducts_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridFilteringItem)
            {
                var filterItem = (GridFilteringItem)e.Item;
                var categoriesComboBox = (RadComboBox)filterItem.FindControl("rcbCategoryName");// accessing RadComboBox in FilterTemplate
                var adventureWorksLt2012Entities = new AdventureWorksLT2012Entities();
                foreach (var consultant in adventureWorksLt2012Entities.Products.GroupBy(x => x.ProductCategory).Select(x => new { x.Key.Name, x.Key.ProductCategoryID }))
                {
                    categoriesComboBox.Items.Add(new RadComboBoxItem(consultant.Name, consultant.ProductCategoryID.ToString()));
                }
            }
        }

niedziela, 10 czerwca 2012

PostgreSql - konfiguracja ODBC na Windows 7

W przypadku Windows 7 x64.
Aby stworzyć połączenie via ODBC dla bazy PostgreSql należy kolejno przejść do:
  1. Panel Sterowania
  2. Narzędzia administracyjne
  3. Źródła danych (ODBC)
 Ukaże się nam następujący ekran:


Wybieramy zakładkę System DSN i klikamy na dodaj:


Okazuje się że na liście nie ma bazy PostgreSql. Dzieje się tak, dlatego iż w systemie są dwie aplikacje umożliwiające dodawanie połączenia ODBC.
Prawidłowy kreator do dodawania znajduje się w lokalizacji:

C:\Windows\SysWOW64\odbcad32.exe

Uruchamiamy narzędzie i już teraz na liście widnieje odpowiedni sterownik:






Klikamy na zakończ, teraz ukazuje się ekran na którym konfigurujemy połączenie do bazy danych:


Po zakończeniu konfiguracji klikamy na zakończ.

Aby następnie  w aplikacji .NET można było się połączyć do tak skonfigurowanego DSNa, należy w App.config/Web.config wstawić następujący ConnectionString:


Code:
 <connectionStrings>
  <add name="DataBaseConnectionString" connectionString="Dsn=Dsn_Name" providerName="System.Data.Odbc"/>
 </connectionStrings>

środa, 6 czerwca 2012

Kody statusów HTTP

Kody statusów mówią w jaki sposób zostało zrealizowane zapytanie klienta. Ze względu na informacje które przekazują możemy je podzielić na 5 kategorii:
  • 100 - 199 - kody zawierające informacje (np. informacja o przekroczonym czasie połączenia)
  • 200 - 299 - kody powodzenia 
  • 300 - 309 - kody przekierowania
  • 400 - 499 - błędy aplikacji
  • 500 - 599 - błędy serwera

Kilka statusów z którymi możemy się najczęściej spotkać:
  • 200 - wszystko przebiegło pomyślnie
  • 301 - zawartość przeniesiona w inne miejsce, nie sprawdzaj więcej tej lokalizacji
  • 302 - zawartość przeniesiona w inne miejsce, sprawdź to miejsce
  • 304 - zawartość nie zmieniła się od ostatniej wizyty
  • 400 - błędna składnia zapytania
  • 401 - nieautoryzowane zapytania (być może trzeba się najpierw zalogować)
  • 403 - dostęp odrzucony
  • 404 - zasób nie istnieje
  • 500 - błąd wewnętrzny serwera - np. w aplikacji został rzucony wyjątek lub też problem z samym oprogramowaniem zainstalowanym na serwerze
  • 503 - serwer niedostępny - może zostać wysłany np. w przypadku dużego obciążenia serwera