piątek, 7 lutego 2014

Kopiowanie zawartości jednej tabeli do drugiej

Załóżmy, że mamy dwie identyczne tabele, Table1, Table2. Table1 trzyma aktualne dane, Table2 dane historyczne. Ich struktura jest identyczna. Czasami zdarza się, że musimy przekopiować pewną ilość danych z jednej tabeli do drugiej. 
Można to zrobić następujących skryptem:

INSERT INTO Table1
SELECT * FROM Table2
WHERE some_condition

Bardzo prosty skrypcik. A piszę o nim ponieważ miałem z nim chwilę problem gdy napisałem go w takiej postaci (Z NAWIASAMI):
INSERT INTO Table1
(SELECT * FROM Table2
WHERE some_condition)

wtedy zapytanie wywala błąd. Prawdopodobnie dlatego, że oczekuje w nawiasach dokładnych parametrów a nie podzapytania.
Na szczęście szybko udało się rozwiązać problem. 

Wybieranie nazw kolumn w tabeli

Czasami zdarza się, że nasza tabela zawiera sporą ilość kolumn a my musimy wylistować wszystkie kolumny. Wiadomo, programista to leń i zawsze chce sobie ułatwić pracę. Dlatego poniższy skrypt już nie raz był przeze mnie używany. Wybiera on wszystkie kolumny z danej tabeli:

SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'

czwartek, 23 stycznia 2014

Instalacja SQL Server 2012 Management Studio Express

Ściągasz sobie SQL Server 2012 i instalujesz. Wchodzisz w menu start -> SQL Server 2012, chcesz odpalić management studio i zonk! Nie ma! No nie ma! Chyba z godzinę szukałem gdzie i jak to zainstalować. Ściągnąłem od początku SQL Server 2012 Express i nadal dupa. Okazuje się, że trzeba ściągnąć odpowiedni pakiet, o stąd:
http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/express.aspx


czwartek, 14 listopada 2013

Socket in C# - łączenie i wysyłanie wiadomości do serwera


Ostatnio po raz pierwszy byłem zmuszony użyć klasy Socket pisząc testy jednostkowe sprawdzające komunikację między klientem a serwerem z użyciem Socketów. Standardowo można stworzyć nową instancję klasy Socket, następie wywołać Connect i po połączeniu z serwerem wysłać do niego odpowiednią wiadomość. Ja jednak postanowiłem skrócić sobie pracę używając klasy TcpClient, która generalnie jest pewnym "wrapperem" nad klasą Socket, dzięki której po prostu możemy sobie pisać szybciej i mniej. Przykładowo w konstruktorze tej klasy następuje połączenie poprzez socket z serwerem, więc już nie muszę wołać metody Connect(), co wydaje się być mega fajne. Dodatkowo klasa TcpClient ma właściwość Client, która zwraca typ Socket.

Sama komunikacja z klienta na serwer wygląda następująco:

using (Socket socket = new TcpClient(host, port).Client)
{
   byte[] msg = Encoding.UTF8.GetBytes("This is a test");
   byte[] bytes = new byte[256];
   int bytesSent = socket.Send(msg);
   Assert.IsTrue(bytesSent > 0);
   int bytesReceived = socket.Receive(bytes);
   Assert.IsTrue(bytesReceived > 0);
}

Instalacja windows service za pomocą installutil - security access error

Czasami przychodzi potrzeba instalacji usługi Windows Service w środowisku developerskim bez używania installera. Jest to standardowy sposób przy tworzeniu nowego serwisu lub w przypadku gdy chcemy go zdebugować po raz pierwszy. Aby zainstalować taki windows service, który de facto jest naszą aplikacją konsolową należy w Visual Studio Command Prompt wpisać komendę:

installutil yourproject.exe

Czasami jednak wyskakuje błąd np. taki: "Security logs inaccessible". Oznacza to, że nie mamy dostatecznych praw na zainstalowanie serwisu i dodanie informacji o takim zdarzeniu do Event Loga. Rozwiązaniem jest po prostu uruchomienie Visual Studio Command Prompt jako administrator. "As simple as that"

piątek, 8 listopada 2013

"Symulacja" wysyłania maili - czyli inna metoda doręczenia maili

Jeśli piszecie funkcjonalność wysyłania maili a w środowisku developerskim nie macie dostępu do serwera smtp, istnieje prosty mechanizm, który pozwoli na symulację takiej wysyłki. Wystarczy w pliku konfiguracyjnym wartość w deliveryMethod zmienić z "Network" na "SpecifiedPickupDirectory" co skutkuje tym, że maile będą zapisywały się na dysku. Wystarczy jeszcze tylko podać gdzie dokładnie. 
Poniżej przykład:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="c:\temp\maildrop\"/>
    </smtp>
  </mailSettings>
</system.net>