Mai tineti minte REM ? A aparut si in politica
Nu am vrut sa o pun inainte de alegeri …dar acum pot. Si chiar nu stiu daca o sa fie comentat de la Guvern partidul cu pricina…
Mai tineti minte REM ? A aparut si in politica
Nu am vrut sa o pun inainte de alegeri …dar acum pot. Si chiar nu stiu daca o sa fie comentat de la Guvern partidul cu pricina…
Dupa ce am crezut ca am cistigat un Windows Home Server ( vezi http://sqlblog.com/blogs/adam_machanic/archive/2008/11/21/pass-2008-friday-keynote-parallel-scale.aspx )… la anuntul oficial se pare ca nu …
Asta e – mi-a placut CDC din Sql Server 2008 –si sufeream ca nu avea o interfata grafica.
Singura problema este ca mi-a amintit de o intimplare, de mult uitata, din clasa a 8-a:
Maica-mea se intelegea bine cu diriginta – si la sfirsit ii da telefon: Doamna, felicitari! Baiatul dvoastra a luat premiul 1 cu coronita!
Maica-mea mi-a spus –eu nu am bagat de seama …nu asta conta pentru mine…
Peste ½ h , telefon : S-a produs o incurcatura – s-au recalculat si a luat premiul 2…
Maica-mea vroia sa ma consoleze- eu i-am spus ca nu conteaza- dadeam la Caragiale si vroiam sa termin o problema de matematica mai dificila…
Peste ½ h , telefon : S-a produs o incurcatura – s-au recalculat din nou si a luat premiul 3…
Pina la urma am luat mentiune …
Nu pot sa zic ca nu imi pare rau dupa Windows Home Server …
Aplicatia pe care m-am gindit sa o facem va realiza urmatoarele:
Va tine o evidenta (paralela !) a angajatilor dintr-o firma ( va fi integrat Active Directory si va tine datele intr-o baza de date Sql Server 2008)
Va tine o evidenta a conturilor acestora pe diverse aplicatii, precum si a diferitelor beneficii ale user-ilor ( telefon, laptop, etc)
Va face un workflow pentru un nou angajat, astfel incit sa se stie sigur cine ce are de facut( cumparat birou, laptop, etc)
Pentru toate aceste actiuni se va tine o evidenta a celor care adauga/modifica date in sistem.
Pe masura ce vom dezvolta aplicatia, ii vom adauga tot felul de noi functionalitati.Sa o numim Evidan(de la Evidenta Angajati)
Sa definim principalele roluri de actiune asupra sistemului:
Cerintele de lucru pentru versiunea 1 :
Sunt deschis la sugestii pentru orice imbunatatire
Daca aveti blog – sau orice altceva publicati online, va rog sa ma ajutati raspindind
http://serviciipeweb.ro/propriu/2008/11/29/CumparaturiLaCoraLujerului.aspx
Nu de alta, dar macar sa se stie ca la Cora nu poti fi sigur nici de preturile electronice (nu vorbesc de cele de pe raft ….)
Multumesc
Eu stiu ca nu sunt un devigner – dar sunt citeva lucruri care le stiu…si, mai ales, stiu cind nu imi place ceva.
Pentru “asa nu” am ales 2 site-uri reprezentative:
Acesta este unul din motivele pentru care nu imi place Flash-ul – e asa de usor sa iti dai liber imaginatiei, dar si asa de usor sa faci un site de nefolosit.
Daca gasiti telefonul de contact in primele 10 secunde aveti un punct.
Daca gasiti cum sa reveniti de la contact la prima informatie in 5 secunde, aveti al doilea punct.
Daca stiti cum sa trimiteti unui prieten informatia cu adresa clubului – cu un simplu link – aveti al treilea punct.
Ce vreau sa zic : aparent e OK, design OK , vinde soft. Totusi ceva nu tine, de ex. http://www.caustic.ro/csoftware.html sau http://www.caustic.ro/aspwebsites.html
In plus “Buy” te pune sa completezi “product id” in loc sa si-l completeze singur
Voi ce exemple aveti ? (triviale, va rog)
La fiecare parte a tutorialului( sau aproape ) o sa am citeva chestii pe care trebuie sa le faca cititorul singur.
De exemplu, la cel cu “aplicatii mici de test” am dat ca tema de casa realizarea aceleiasi aplicatii in Powershell. Daca cineva m-ar ajuta sa realizez temele de casa (cu poze despre cum l-a facut) , pot oferi ca recompensa :
Ce ziceti ?
Acum vom trece aplicatia minimala de consola in mai multe outputuri : Windows Forms, Asp.NET, WPF
Vom transforma aceasta aplicatie intr-una de Windows Forms
Click dreapta pe solutie, Add=> New Project, Windows Forms Application

Dublu click pe form1, luam un buton din Toolbox , dublu click pe el, si apare evenimentul de click

Copiem exemplu de la aplicatia ConsoleApplication1, modificand Console.Write in MessageBox
In figura alaturata se vede ca nu aplicatia nu stie cine este SqlConnection. Dar, imediat in stinga, exista un icon mic -daca dati click pe el, o sa vedeti ca stie – alegeti “using”

Alegeti “set as startup project”

CTRL+F5 si apasati pe “buton1” – ar trebui sa va apara

Ce am observat ? Ca am scris de 2 ori acelasi cod. Daca am avea de modificat, nu ar fi cam greu in aceasta aplicatie -dar pentru o aplicatie mare am putea intimpina probleme. Ar fi bine daca acest cod s-ar tine undeva , intr-o locatie comuna – ceea ce in Windows numim dll.
OK – sa adaugam un dll – click dreapta pe Solution, Add=>New Project , Class Library
A aparut “Class1” si adaugam codul de pe Consola, modificat putin – nu mai interceptam SqlException -ca nu am stii ce sa intoarcem ( de fapt, ar trebui sa ne facem clasa noastra de exceptii – dar despre asta mai tirziu) – si intoarcem chiar ce gasim in BD:
public
string MessageFromBD()
{
using (SqlConnection sc = new
SqlConnection())
{
sc.ConnectionString = @”Server=.\SqlExpress;Database=testAndrei;Trusted_Connection=True;”;
sc.Open();
using (SqlCommand sco = new
SqlCommand())
{
sco.CommandType = CommandType.Text;
sco.CommandText = “select top 1 Test from TestTable”;
sco.Connection = sc;
string text = sco.ExecuteScalar().ToString();
return text;
}
}
}
Bun – acum sa chemam acest mesaj si in consola, si in Windows Forms.La amindoua dam click dreapta pe “References”, “Add reference”, “projects”

Selectam ClassLibrary1 si dam OK. Puem pe Console Application1 set as startup
Inlocuim codul din ConsoleApplication1, Program cu urmatorul:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class
Program
{
static
void Main(string[] args)
{
try
{
ClassLibrary1.Class1 p = new ClassLibrary1.Class1();
string text = p.MessageFromBD();
Console.WriteLine(“found “ + text);
}
catch (SqlException ex)
{
Console.WriteLine(” Eroare conexiune:” + ex.Message);
return;
}
}
}
}
CTRL+F5,ca sa vedem rezultatul. Daca merge, haidem sa il modificam si pe cel de Windows Forms( nu uitati sa puneti referinta si set as startup)
Bun – acum vom face si o aplicatie WPF -click dreapta pe solutie, Add=>New Application, WpfApplication.
Adaugati referinta la ClassLibrary1, adaugati acelasi cod ca la Windows Forms si CTRL+F5
Ultimul pas, facem o aplicatie Web pentru aceasta aplicatie:
In carte=>testBD creeam un folder numit WebApplication1.Apasam “Start=>Run , control panel( swtich to classic view daca scrie asa ceva), administrative tools, Internet Information Services”
Expandati “local computer “, “WebSites”,”Default Web Site”, click dreapta pe “default web site”,new , “Virtual directory”

La alias scrieti “WebApplication1” si la Directory scrieti calea catre folder ( la mine, C:\carte\testBD\WebApplication1)
Asigurati-va ca la click dreapta pe “WebApplication1” , properties, ASP.NET, versiunea este 2.0

Bun – acum sa creeam aplicatia. Pornim Microsoft Visual Web Developer 2008 Express Edition si “File=>OpenWebSite, Local IIS” si expandati pina dati de WebApplication1

Acum adaugam dll-ul care facea comunicarea cu BD:
File=> Add=> Existing project si navigati pina la ClassLibrary1( la mine, C:\carte\testBD\ClassLibrary1). Adaugati csproj.Adaugam referinta la dll: La fel, click dreapta pe http://localhost/WebApplication1 , add reference, projects, classlibrary1
Acum adaugam pagina unde o sa vedem mesajul :
click dreapta pe http://localhost/WebApplication1 , add new item, Web Form ( fiti atent in ce limbak dati -C# sau VB.NET…)
Acum, gasiti jos Design – apasati pe el

Din toolbox alegeti din nou butonul , trageti pe forma si dati dublu click
Vom pune (aproape) acelasi cod ca si pentru WindowsForms/Console/WPF:
protected
void Button1_Click(object sender, EventArgs e)
{
try
{
ClassLibrary1.Class1 p = new ClassLibrary1.Class1();
string text = p.MessageFromBD();
Response.Write(“found “ + text);
}
catch (SqlException ex)
{
Response.Write(” Eroare conexiune:” + ex.Message);
return;
}
}
Apasati CTRL+F5, apasati pe buton si ar trebui sa va scrie:
“Eroare conexiune:Cannot open database “testAndrei” requested by the login. The login failed. Login failed for user ‘TEST1\ASPNET’. ”
Mai tineti minte ca am folosit conexiunea trusted :
sc.ConnectionString = @”Server=.\SqlExpress;Database=testAndrei;Trusted_Connection=True;”;
Acum, haideti sa ne identificam cum trebuie si in ASP.NET. click dreapta pe http://localhost/WebApplication1 , add new item,Web Configuration File(lasati numele de Web.Config asa cum este!), gasiti authentication si puneti linga:
<identity
impersonate=“true“/>
CTRL+F5 din nou si acum apare:
Eroare conexiune:Cannot open database “testAndrei” requested by the login. The login failed. Login failed for user ‘TEST1\IUSR_TEST1’.
Tare, nu ? Am schimbat un user cu altul – din ASPNET, sub care ruleaza ASP.NET, am schimbat IUSR_TEST1 – sub care rulam default.
Hai sa facem ultima schimbare , ca sa ne recunoasca IIS :
Apasam “Start=>Run , control panel( switch to classic view daca scrie asa ceva), administrative tools, Internet Information Services”
Click dreapta pe “WebApplication1” , properties, Directory security, Anonymous access, Edit,scoateti “Anonymous Access”

OK si iar OK. Ne intoarcem la aplicatie si…Ura!, merge:

Observatii:
Lecturi Recomandate:
How to implement impersonation in an ASP.NET application, http://support.microsoft.com/default.aspx/kb/306158
Pentru ca popfly a ajuns la DevLabs , am zis sa ii dau o (noua) sansa. Aveam deja marota mea preferata, cursul valutar BNR si BCE – si am zis : Ce ar fi sa o fac pe user-ul amarit si sa incerc sa le integrez – de ex., sa vad cursul comun pe USD ?Mai ales ca am 2 RSS-uri pentru asta : http://www.infovalutar.ro/cursuribce.rss si http://www.infovalutar.ro/cursuri.rss
Asa ca, inarmat cu Windows Live ID, am inceput sa fac combinatii de Mashup.
Inceputul a fost usor – adauga un RSS, adauga un al doilea RSS … Hmmm ? Cum sa le combin ? Am cautat « combine » …Dar, din pacate, insista sa le combin fara sa imi dea un criteriu de combinare … Hmm. Am inceput sa fac ce trebuia sa fac de la inceput – si anume sa citesc Help-ul… Am dat pina la urma de RSSList- care nu e de fapt lista de RSS, ci , mai curind, un output de RSS. Si aici a trebuit sa ma bag un pic prin cod ca sa fac legatura – ajutat, bineinteles, de codul generat deja…
data[“RSSList”] = new Array();
var num = data[“RSS”].length;
var num2 = data[“RSS (2)”].length;
rsslist.__reserved.pendingCalls = num + num2;
if (num == 0)
{
console.write(“There are no incoming items.”);
environment.finish();
}
for (var i=0; i<num; i++)
{
try
{
var find = data[“RSS”][i].title;
var text = “BNR : 1 ” +data[“RSS”][i].title + ” = ” + data[“RSS”][i].description + ” RON “;
for(var j=0;j<num2;j++)
{
if(data[“RSS (2)”][j].title == find)
{
text += ” BCE : 1 EUR = ” + data[“RSS (2)”][j].description + ” ” + data[“RSS (2)”][j].title ;
break;
}
}
var result = rsslist.show(data[“RSS”][i].title,text, data[“RSS”][i].link);
}
catch (ex)
{
environment.reportErrorInLoop(i, ex);
}
}
Concluzii :
Adresa lui la popfly : http://www.popfly.com/users/ignatandrei/cursvalutar
Pe Windows Live il gasiti la
http://gallery.live.com/LiveItemDetail.aspx?li=3d55ae26-79a5-47b7-a9bc-de3d5654a295 (pentru Vista)
si la http://gallery.live.com/LiveItemDetail.aspx?li=9ef48f72-15a0-4754-9efa-f93efa316ff3 (pentru Web)
Daca are cineva Vista, ziceti-mi(pozati-mi) si mie cum arata
Dragii mei,
Am fost nominalizat la Sql Server Heroes cu CDC Helper
Nu mi-ar strica un Windows Home Server – asa ca , daca voi considerati ca proiectul merita ( face Change data capture pe interfata grafica…), puteti vota aici
https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=7231 ( cred ca va trebuie un Windows Live ID)
Inca ceva: poate cineva sa verifice proiectul pe SQL Server 2008 release ( nu am decit express care nu are CDC…)
Aveti doua posibilitati : fie cod sursa de la adresa http://www.codeplex.com/CDCHelper/Release/ProjectReleases.aspx , fie instalati aplicatia (daca aveti .NET 3.5 si Sql Server 2008) de la adresa http://serviciipeweb.ro/downloads/cdchelper/ si apasati pe test…
Multumesc,
Andrei
Ca sa verificam aplicatia, vom creea o noua baza de date si ne vom conecta la o tabela sa obtinem datele.
Pornim Sql Server Management Studio ( Start=> Programs => Microsoft SQL Server 2008 => SQL Server Management Studio ) si ne conectam la .\SqlExpress ( numele instantei este in Control Panel=> Administrative Tools => services => Sql Server. Vedeti Path to executable . Daca se termina in “<cale>\sqlservr.exe” –s<Nume>, atunci numele sub care va conectati este .\<Nume> . Daca nu, va puteti conecta la . )
Ok, acum dati click dreapta Databases, NewDatabase si introduceti “testAndrei”.
Apasati apoi OK
Expandeaza apoi “Databases” apasind pe + ( daca e deja expandat, click pe Databases si apoi F5)
Expandeaza “testAndrei”, click dreapta pe table, “New Table”. La “column name” pune Test si apasa “enter” . Apasa CTRL+S si introdu “TestTable”
Expandeaza “Tables” apasind pe + ( daca e deja expandat, click pe Tables si apoi F5)
Click dreapta si “Edit 200 rows” . In casuta puneti “Andrei” si apasa “enter”
Acum inchide tot.
Felicitari, ai creat prima ta baza de date, cu prima tabela !
O vom acces acum prin C#.
Deschide Microsoft Visual C# 2008 Express Edition (Start=> Programs => Microsoft Visual C# 2008 Express Edition) . File=> New project si alegeti “Console Application”
Introduceti urmatorul text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class
Program
{
static
void Main(string[] args)
{
using (SqlConnection sc = new
SqlConnection())
{
sc.ConnectionString = @”Server=.\SqlExpress;Database=testAndrei;Trusted_Connection=True;”;
try
{
sc.Open();
}
catch (SqlException ex)
{
Console.WriteLine(” Eroare conexiune:” + ex.Message);
return;
}
using (SqlCommand sco = new
SqlCommand())
{
sco.CommandType = CommandType.Text;
sco.CommandText = “select top 1 Test from TestTable”;
sco.Connection = sc;
string text = sco.ExecuteScalar().ToString();
Console.WriteLine(” am gasit in BD “ + text);
}
}
}
}
}
Dupa cite observati, am interceptat eroare de conexiune cu try/catch – daca SQL Server nu e pornit sau exista o alta problema, da o eroare custom.
Apasati CTRL+Shift+B si, daca v-au dat erori, rezolvati-le sau scrieti-mi.
Daca nu, CTRL+F5 si , daca totul e OK, va va aparea :
am gasit in BD andrei
Press any key to continue . . .
Daca nu, puteti sa imi scrieti – dar dati-mi, va rog, descrierea erorii …
Ca bonus vom accesa SQL Server prin Powershell . Deschideti din nou Sql Server Management Studio , expandati Databases si click dreapta pe “TestAndrei”. Acolo aveti “Start PowerShell” . Sa zicem ca vrem sa obtinem o lista cu toate tabelele din BD TestAndrei( deocamdata una singura, dar orisicit …) . Nimic mai simplu : Dati “cd Tables” , <enter> si apoi “dir”
Daca am vrea sa exportam lista intr-un format, am putea da urmatoarea comanda
DIR | Sort-Object -Property Schema,Name | Format-Table schema, name –AutoSize
Daca am vrea sa le si exportam, de exemplu in CSV, vom utilize
DIR | Sort-Object -Property Schema,Name | Select-Object schema, name | export-csv c:\tables.csv
Rezultatul ar trebui sa fie urmatorul :
#TYPE System.Management.Automation.PSCustomObject
Schema,Name
dbo,TestTable
Data viitoare vom trece aceasta aplicatie minimala prin in Windows Forms, WPF, ASP.NET ca sa dau o idée despre ce ne asteapta de la acest tutorial.
Sursa o gasiti si la
http://serviciipeweb.ro/iafblog/content/binary/net35/instalare/testBD.zip
Backupul bazei de date
http://serviciipeweb.ro/iafblog/content/binary/net35/instalare/testandrei.zip
Ca sa refaceti aplicatia :
Extrageti continutul zip-urilor.
Pentru a reface Baza de date urmariti pasii:
Porniti Sql Server Management Studio ( Start=> Programs => Microsoft SQL Server 2008 => SQL Server Management Studio ) si ne conectam la .\SqlExpress ( numele instantei este in Control Panel=> Administrative Tools => services => Sql Server. Vedeti Path to executable . Daca se termina in “<cale>\sqlservr.exe” –s<Nume>, atunci numele sub care va conectati este .\<Nume> . Daca nu, va puteti conecta la . )
Ok, acum dati click dreapta Databases=> Restore Database , puneti la numele bazei de date “TestAndrei” –sper sa nu folositi acest nume ( daca da, dati, va rog, altul! ) . Selectati apoi “From device” apasati cele 3 puncte si selectati fisierul .bak.
Verificati, de asemenea, la “options” ce cale aveti scrisa pentru locatia fisierelor.
Cum am spus, data viitoare vom trece aceasta aplicatie minimala prin in Windows Forms, WPF, ASP.NET ca sa dau o idée despre ce ne asteapta de la acest tutorial.
Lecturi Recomandate:
PowerShell tutorial : https://blogs.technet.com/chitpro-de/archive/2007/05/10/english-version-of-windows-powershell-course-book-available-for-download.aspx
ConnectionStrings : http://www.connectionstrings.com/