SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Pazar, Nisan 20, 2014

Çoklu Dil Desteği – Veri Tabanı Tasarım Örnekleri ile

Zaman içerisinde karşımıza çok farklı projeler gelebilmektedir. Ancak bu projeler içerisinde özellikle de global ölçekli ya da bu ölçekte uygulama geliştiren firmalarda bazı temel gereksinimler sürekli olarak karşımıza çıkabilmektedir. Bu gereksinimlerden biri ve belki de en önemlisi olan çoklu dil desteğinin veri tabanı (DB) katmanında nasıl yapıldığını kısa ve hızlıca inceliyor olacağız.

Öncelikle çoklu dil desteği dediğimizde aklımıza gelen ilk çözüm yolu *.resx dosyalarını kullanmak gelmektedir. Ancak bu uzaktan yönetilen ya da anlık olarak metin değişikliği gereksinimi bulunan uygulamalarda bazı ufak problemler çıkartabilmektedir.

Ne gibi problemler derseniz; iki grupta inceleyebiliriz. Web projeleri ve windows üzerinde çalışan projeler.

Web projelerinde IIS üzerinde yer alan bir *.resx dosyasını değiştirdiğinizde son kullanıcı tarafında etkisi hemen görülmeyebilir. Cache mekanizmaları sebebiyle ortalama 15-30 dakika arasında bir görüntüleme süre farkı ile karşılaşabiliriz. Faha kötü felaket senaryosunda ise uygulama asp.net ve diğer web uygulamalarının klasiği olan sarı sayfa ile kaşılaşılabilir.

Windows projelerinde durum biraz daha vahimdir. *.resx dosyasını değiştirdiğinizde uygulamanızın yeni sürümünü çıkartmanız gerekmektedir. Sonra ki süreçtede bu kelime, cümle ya da paragraf değişikliklerinin neden bu kadar fazla olduğunun ve düzeltilmesi için neler yapılması gerektiğinin araştırmaları yapılır durur. Çözüm yolu olarak web servis üzerinden *.resx dosyasını paylaşabilirsiniz.

Ancak bu durumlarda genellikle dil ile ilgili işlemler veri tabanında tutulurken geri dönüş değerleri web servis üzerinde uygulamalar ile konuşturulur ve çözüm yoluna gidilir.

O zaman veri tabanında bu işlemi nasıl yapabileceğimizi hızlıca incelemeye başlayalım.

Yöntem 1 – Kolon ekleme yöntemi ile ( Popülerlik :) )

Anti-pattern kavramlarını üstün körü incelediyseniz gözünüze çok basit bir detay çarpmıştır. En popüler yöntem en doğru yöntem değildir. Bu fikri referans göstererek en fazla kullanılan çoklu dil desteğinin uygulama şeması aşağıdaki gibi oluşturulur.

CREATE TABLE app_product (
  Id Int IDENTITY NOT NULL,
  Description_tr Text, 

  Description_en Text,
  Description_fr Text,

  -- …..
  PRIMARY KEY (Id)
);

Avantajları

+basitlik

+veri tabanı sorgularındaki kolaylık (join yazılmasına gerek yok)

Dezavantajları

+Yeni bir dil eklendiğinde şema üziernde ki değişiklik gereksinimi

+Kullanılan bütün dillerin tercümeleri yer almayacak. (Veri tabanında sürekli olarak null alanlar yer alacak ve veri tabanında çok yer kaplayacak)

+değişiklik yönetiminin zorluğu

Yöntem 2 – Tek tablo üzerinden

Veri yönetim şemaları ve normalizasyon kurallarına göre oluşturulmuş bir veri şeması üzerinden işlerin tek tablo üzerinden yürütülmesi.

CREATE TABLE ref_language (
  Code Char(2)NOT NULL,
  Name Varchar(20) NOT NULL,
  PRIMARY KEY (Code)
);
CREATE TABLE app_translation (
Id Int IDENTITY NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE app_translation_entry (
TranslationId Int NOT NULL,
LanguageCode Char(2) NOT NULL,
Text Text NOT NULL,
FOREIGN KEY (TranslationId) REFERENCES app_translation(Id),
FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);
CREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
Description Int NOT NULL,
        PRIMARY KEY (Id),
FOREIGN KEY (Description) REFERENCES app_translation(Id)
);

Avantajları

+yeni bir dil eklendiğinde şemanın değiştirilmesine gerek duyulmaması

+basit bir şekilde tablolar arasındaki ilişkinin görülebilmesi

+bütün tercümelerin tek bir tabloda tutulması (aslında bu durum dezavantajlıdır. Çünkü fazla kalabalık verillerin okunaklılığı ve yönetimi oldukça zordur)

Dezavantajları

+karmaşık sorguların yazılması gerekliliği (doğru içeriğin getirilebilmesi için oldukça karmaşık sorguların yazılması gerçeği)

+çok karmaşık

Yöntem 3 – Opsiyonel veri eklemeli (Önerim)

Bu yöntemde dil referanslarını bir tabloda, ürünlerin (label, buton, vb.) ayrı bir tabloda ve son olarak ise bunların foreign key olarak bağlı olduğu ayrı bir tabloda ise gerekli tercümeler yer alır.

CREATE TABLE ref_language (
  Code Char(2)NOT NULL,
  Name Varchar(20) NOT NULL,
  PRIMARY KEY (Code)
);
CREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE app_product_translation (
ProductId Int NOT NULL,
LanguageCode Char(2) NOT NULL,
Description Text NOT NULL,
FOREIGN KEY (ProductId) REFERENCES app_product(Id),
FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);

Avantajları

+yeni bir dil eklendiğinde şemanın değiştirilmesine gerek duyulmaması

+ilişkisel ve basit sorgular (1 join yeterlidir)

Dezavantajları

+tablo içerisinde kayıtlar tekrarlı olabilir.

Uygulamalarda çoklu dil desteğinin veri tabanı üzerinden nasıl çözülebileceğini en çok kullanılan üç yöntem ile incelemeye çalıştık. Bunların her hangi biri yanlıştır ya da herhangi biri doğrudur diyebilme şansımız yoktur. Eğer ufak ölçekli bir uygulama yapıyorsanız 1 numaralı yöntem oldukça işinize yarayacaktır. Sadece 2 ya da 3 dil kullanıyor olduğunuz için hem sorgulama hem de uygulama performansı çok üst düzeyde olacaktır. Tabii ki unutmamak gerekir ki sabit tanımlarınız çok fazla değişmiyor ve belirli adette ürününüzün bilgilerini veri tabanından getiriyorsunuz.

Büyük ölçekte veri dönüşümü olan ve henüz ülkesel dönüşümünü tamamlamamış organizasyonlarda ise 2. ve 3. yöntemler tercih edilecektir. Sorgularının karmaşıklı sebebiyle 2. yöntem yerine 3. yöntemin çok sık tercih edildiği görülmektedir.

Kısaca, çoklu dil desteğinin veri tabanı üzerinde nasıl yapıldığını 3 farklı yöntem ile örneklemeye çalıştık.

Umarım yararlı olmuştur.

İyi çalışmalar.

--

Turhal Temizer

Perşembe, Nisan 03, 2014

ORA-12154: TNS:could not resolve the connect identifier specified in Visual Studio

If you are trying to connect to an Oracle Database, through Server Explorer in Visual Studio, you have to ensure that:

1. You have installed the Oracle Data Provider (downloadable from the Oracle Website)
2. Have created the tnsnames.ora file, holding information about the databases (http://www.orafaq.com/wiki/Tnsnames.ora). This file should be created most often in the Network\Admin folder under the Oracle Provider. In my case: C:\app\user\product\11.2.0\client_1\Network\Admin

After having these prerequisites, I still couldn't connect to the Oracle Database. The Visual Studio wizard told me: "ORA-12154: TNS:could not resolve the connect identifier specified". What resolved this issue for me was to add the Environment Variable with name "TNS_ADMIN" and value the Path to the directory containing the "tnsnames.ora" file.
Something like:
TNS_NAMES="C:\app\user\product\11.2.0\client_1\Network\Admin"
Then just restart Visual Studio and you're free to go.

Hope this helps someone out there :)

Using Visual Studio to find a database connection string

I have to give these instructions quite often in Q&A, so it seemed sensible to write them one more time, and then point people in this direction in future...
One of the things it can be difficult to work out is what you actually need in your connection string to access a database via your code. Although there are sites which give examples, (this[^] is a good one) it would help to have a connection to your database open and working to take it from. Visual Studio can help you there.
1) Open the Server Explorer pane. ("View" menu, "Server Explorer" or CTRL+W, L by default)
2) Open the "Data Connections" list. If your database in on the list, skip to step 3
2.1) On the Server Explorer tool bar, click the "Connect to Database" button (yellow column, with green cross and a plug-and-wire icon)
2.2) On the resulting dialog, select the appropriate Date Source, Server name, and other details until the "Test Connection" button works.
2.3) Press the "OK" button to add the connection - this does not affect your project or solution in any way!
3) Click once on the database to highlight it.
4) Look at the Properties Pane (If it isn't visible - and it should be, at all times - then the "View" menu, "Properties Window" or CTRL+W, P will open it)
5) Near the top will be the property "Connection String". You can right click the value, and use "Select All" and "Copy" to move it to the clipboard, ready to be pasted into you application (or preferably your application config file).

Çarşamba, Nisan 02, 2014

Connection String to Connect to Oracle Database

Something like this :

[code]Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;[/code]

This site is really helpfull for all connection strings types : http://www.connectionstrings.com

Connecting to Oracle From Visual Studio

Oracle DB ile çalışırken Management Studio ve Visual Studio ile çalışırken dikkat edilmesi konusunda çok güzel bir yazıyı alt kısımda yer alan link içerisinde bulabilirsiniz.

TNS ORA ‘ya dikkat etmeniz gerekmektedir.

http://blogs.msdn.com/b/kaevans/archive/2009/07/18/connecting-to-oracle-from-visual-studio.aspx

Kolay gelsin.

Best practices when using oracle DB and .NET

Some practices we employ based on our production experience:
•Validate connections when retrieving them from the connection pool.
•Write your service code to not assume that connections are valid - failure to do so can cause quite a bit of grief especially in production environments
•Wherever possible, explicitly close and dispose connections after using them (using(conn){} blocks work well)
•In a service, you should use connections for the shortest time possible - particularly if you are looking to create a scalable solution.
•Consider using explicit timouts on requests appropriate to the typical duration of a request. The last thing you want is to have one type of request that hangs to potentially block your whole system.
•Wherever possible use bind variables to avoid hard parses at the database (this can be a performance nightmare if you don't start out with this practice). Using bind variables also protect you from basic SQL-injection attacks.
•Make sure you have adequate diagnostic support built into your system - consider creating a wrapper around the Oracle ADO calls so that you can instrument, log, and locate all of them.
•Consider using stored procedures or views when possible to push query semantics and knowledge of the data model into the database. This allows easier profileing and query tuning.
•Alternatively, consider use a good ORM library (EF, Hibernate, etc) to encapsulate data access - particularly if you perform both read and write operations.
•Extending on the above - don't pepper your code with dozens of individually written SQL fragments. This quickly becomes a maintainability nightmare.
•If you are committed to Oracle as a database, don't be afraid to use Oracle-specific features. The ODP library provides access to most features - such as returning table cursors, batch operations, etc.
•Oracle treats empty strings ("") and NULLs as equivalent - .NET does not. Normalize your string treatment as appropriate for Oracle.
•Consider using NVARCHAR2 instead of VARCHAR2 if you will store Unicode .NET string directly in your database. Otherwise, convert all unicode strings to conform to the core ASCII subset. Failure to do so can cause all sorts of confusing and evil data corruption problems.

Çarşamba, Mayıs 05, 2010

LINQ to SQL – JOIN

LINQ to SQL verileri uygulama içerisinde nesnesel olarak kullanabilmemize ve işlemlerimizi oldukça kolaylaştıran bir yapıdır. Select, insert, update, delete ve diğer aklımıza gelen SQL işlemlerini basitçe yapabiliyor ve verileri hızlıca bizlere sunabiliyor. Bu yazımızı bana sıklıkça gelen maillerden ötürü yazacağım. Özellikle LINQ to SQL ile ilgili konudaki mailleri filtrelediğimde en sık sorulan sorunun nasıl JOIN ‘in kullanılacağı olduğundan LINQ to SQL ile join işlemlerini nasıl yapabileceğimizi basitçe ve örneklerle inceleyeceğiz.

Uygulamada yer alan örnekleri ve kullanbilmeniz için sisteminizde Nortwind veri tabanının kurulu olması ve oluşturmuş olduğunuz projenin en az .Net Framework 3.0 sürümünde oluyor olması gerekmektedir.
Oluşturulan projeye LinqToSQL veri katmanı ekleniyor, içerisine Nortwind veri tabanı gösteriliyor ve kod kısmında,

NorthwindDataContext dataContext = new NorthwindDataContext();



İle veri kümesine gerekli bağlantıyı kuruyoruz.




Inner Join




var q1 = from c in dataContext.Customers  
         join o in dataContext.Orders on c.CustomerID equals o.CustomerID
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };



LINQ to SQL sorgusu sonucunda oluşan arka tarafta çalışan SQL sorugusu aşağıdaki gibidir.



Not: Oluşan sorguları kontrol etmek için SQL versiyonunun bulunduğu klasöre gidip Performance Tools içerisinde yer alan SQL Server Profiler ‘i kullanarak erişebilirsiniz.



SQL Server Profiler




SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID], [t1].[OrderDate]  
FROM [dbo].[Customers] AS [t0]
INNER JOIN [dbo].[Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]



İlişkili iki tabloyu tek kriter ve inner join ile nasıl eşleştirebileceğimize göz attık.



Left Join




var q2 = from c in dataContext.Customers  
         join o in dataContext.Orders on c.CustomerID equals o.CustomerID into g
         from a in g.DefaultIfEmpty()
         select new
         {
             c.CustomerID,
             c.ContactName,
             a.OrderID,
             a.OrderDate
         };



Left Join kullanımının Inner Join kullanımından tek farkı ve en büyük farkı standart şekilde verileri join ettikten sonra bu birleşime into deyimi yardımı ile bir alias veriyoruz ve sonrasında ana tabloyu join edilmiş tablonun içindekiler yardımı ile verileri getir diyoruz. Ancak eşleşmeyen olmama ihtimalini de göz önüne alarak DefaultIfEmpty() de kullanılarak Left Join işlemi sağlanmış olur.




SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID] AS [OrderID]
, [t1].[OrderDate] AS [OrderDate]
FROM [dbo].[Customers] AS [t0]
LEFT OUTER JOIN [dbo].[Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]



Yaptığımız işlemin Left Join ile ilgili işlemleri sağladığını oluşan SQL kodu yardımı ile görebiliyoruz.



Inner Join – Birden Fazla Kriter ile İlişkilendirmek



Tablolar arası Join işlemlerini yaparken çoğunluklu tek kriter yerine birden fazla kriter yardımı ile ilişki kurulduğu daha çok gözlemlenebilecek bir durumdur. Bu şartlar altında şimdi birden fazla kriter yardımı ile Inner Join işlemini nasıl yapabileceğimize göz atalım.




var q3 = from c in dataContext.Customers  
         join o in dataContext.Orders on
new { a = c.CustomerID, b = c.Country }
equals new { a = o.CustomerID, b = "TR" }

         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };



Bu koşulu sağlamak için tek yapmamız gereken karşılaştıracağımız parametleri aynı sıra halinde olacak şekilde generic koleksiyon içerisinde kullanarak equals deyimi yardımı ile eşlemek olacaktır.




SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID], [t1].[OrderDate]  
FROM [dbo].[Customers] AS [t0]
INNER JOIN [dbo].[Orders] AS [t1] ON ([t0].[CustomerID] = [t1].[CustomerID])
AND ([t0].[Country] = @p0)



Inner Join – Birden Fazla Kriteri OR ile İlişkilendirmek



Tablolar arası ilişki kurarken karşılaştıralan bütün kriterlerin hepsinin aynı anda sağlanması istenmeye bilir. Bu durumda SQL üzerinde kullandığımız OR deyimini LINQ to SQL ‘e nasıl uyarlayabileceğimize göz atacağız.




var q4 = from c in dataContext.Customers  
         from o in dataContext.Orders.Where(a => a.CustomerID == c.CustomerID
|| c.Country == "USA")
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };



Kullanmamız gereken sadece AND yerine || ifadesi olacaktır.




SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID], [t1].[OrderDate]  
FROM [dbo].[Customers] AS [t0], [dbo].[Orders] AS [t1]
WHERE ([t1].[CustomerID] = [t0].[CustomerID]) OR ([t0].[Country] = @p0)



Left Join – Birden Fazla Kriteri OR ile İlişkilendirmek



Tablolar arasında birden fazla kriterleri Inner Join ile birlikte Left Join ile de birleştirebiliriz. Yine || ifadesi yardımı işlemi gerçekleştireceğiz.



var q5 = from c in dataContext.Customers  
         from o in dataContext.Orders.Where(a => a.CustomerID == c.CustomerID
|| c.Country == "USA").DefaultIfEmpty()
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };


Inner Join yardımı ile yapmış olduğumuz işlem ile aynı olmakla birlikte fark olarak yine DefaultIfEmpty() deyimidir.



Not: Left Join işlemi kullandığınızda kesinlikle yapmış olduğunuz ilişkiyi DefaultIfEmpty()  ile bitirmeniz gerekmektedir.



SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID] AS [OrderID]
, [t1].[OrderDate] AS [OrderDate]
FROM [dbo].[Customers] AS [t0]
LEFT OUTER JOIN [dbo].[Orders] AS [t1] ON ([t1].[CustomerID]=[t0].[CustomerID])
OR ([t0].[Country] = @p0)


Sonuç olarak bu yazımızda LINQ to SQL yardımı ile Join işlemlerini nasıl yapabileceğimizi örnekler yardımı ile incelemeye çalıştık.



Umarım yararlı olmuştur.


Cumartesi, Kasım 28, 2009

SQL Server 2008 R2 November CTP

SQL Server 2008 R2'nin November CTP'si (Community Technology Preview) çıktı. İlk bağlantı R2 için, ikinci bağlantı ise Feature Pack'i için... http://www.microsoft.com/downloads/details.aspx?FamilyID=fe0c6a31-5ad6-4eea-a865-73bbe2608bd1&displaylang=en http://www.microsoft.com/downloads/details.aspx?familyid=020EE0D5-BCE4-4A45-9D64-B0C49C8831E5&displaylang=en

Çarşamba, Ekim 14, 2009

SQL Server Reporting Services (SSRS) 2008 - Başlangıç

Kurumsal şirketlerde çalışan ya da finans departmanları ile çalışan yazılımcıların en sık yaptığı işlemlerden biri satış bilgilerini gösterecek rapor uygulamaları hazırlamak oluyor. Bu işlemleri ister bir web uygulaması hazırlayarak ister bir son kullanıcı bazlı masaüstü uygulama ister de excel üzerinde yayınlıyor olalım arka planda her zaman SQL Server içerisinde gelecek bir veri topluluğu oluyor. Bu durumda t-sql yardımı ile bir takım SQL cümlecikleri yazarak raporlama isteklerimizi karşılamaya çalıştık ve çalışmaya da devam edeceğiz. Bu işlemler için hazırlanan SQL cümlecikleri ile view, store procedure ya da düzenli olarak güncellenecek olan bir tablo hazırlanır ve veri gösterilecek ekranların bu yapılar üzerinde beslenmesine olanak tanınır. Günümüzde aktif olarak bilgi işlem departmanları olan şirketleri göz önüne alırsakta eğer ki ellerinde Sharepoint Services ya da MS CRM ve bunun gibi bir teknolojisi olmayan bir şirket ise düzenli olarak raporlarını odbc bağlantısı ile excel üzerinde göstermeye çalışırlar ki, kısa ve orta vadede istekleri karşılamakla birlikte bir süre sonra uygulama yetkinlikleri açısından eksikler yaşanmaya başlanıyor. Ne gibi aklınıza bir soru gelebilir ya da açıkladıktan sonra aa evet bizde böyle bir sorun ile karşılaştık diyebilirsiniz ki bu normal bir durumdur. Özellikle excel dosyalarında verileri gösteren kişilerin en temel anlamda yaşadığı iki sorun vardır. Birincisi satır ve sütun sayısı yetmeyebilir. İkincisi ise dosyalarının maksimum boyutları vardır ve biz bu boyutları aşıyoruzdur. Başlıca aklımıza gelen sorunlar bu şekildedir. Tabi sadece sorun değil basit yönleri de vardır. Özellikle excel içerisine alınmış olan veriler pivot tablolar ve bunun alt özellikleri yardımı ile oldukça esnek bir şekilde raporlarda hazırlanabilinmektedir. Herşey güzel verileri aldık, işledik, hesapladık ve son kullanıcıya farklı seçenekler ile sunduk. Ama bu işlemleri yaparken aklımızdan bir uygulama kaçıverdi ki bu Reporting Services 'in ta kendisidir. Özellikle SQL Server ile uygulama geliştiricilerine aklını yıllar yılı bu yaptığımız işlemleri daha kolay bir yol ile yapabileceğimiz bir işlem yok mudur acaba şeklinde sorular takıldı. Sonrasında ise Microsoft geliştiricileri Microsoft SQL Server Reporting Services  SSRS uygulamasını oluşturarak bizi bir çok işlemi kolayca yapabilmemize olanak tanır duruma getirmişlerdir. SQL Server 2000 uygulamalarına Add-on olarak eklenen Reporting Services, SQL Server 2005 ile birlikte SQL Server paketlerinin içerisine entegre olarak gelmekte ve bizlerin kullanımına sunulmaktadır.

Açıklamalardan da anlaşılacağı gibi bu yazımızda en temel anlamda bir rapor nasıl hazırlanır. Web sunucusu üzerinde bu raporu nasıl görüntüleyebiliriz gibi temel kavramlarını ele alarak SSRS 'e giriş yapacağız.

Repoting Services ile uygulama geliştirirken SQL Server ve t-sql 'ün gücünün yanı sıra geliştirme ortamında yer alan bileşenleri ile de başarılı bir yapıdır. Bunları kullanım sırasına göre sıralarsak birincisi sırada Reporting Services programlama kabiliyetleri yer alacaktır. Devamında ise sırası ile, dahili URL, SOAL ve WMI arayüzü yer almaktadır.

Reporting Services 'in mimari yapısını basit olarak diyagram üzerinde göstermek gerekirse karşımıza aşağıdaki gibi sonuç çıkacaktır.


Peki bu diyagramdan yararlanarak neler yapılabileceğinden kısaca bahsetmek gerekirse,

• Reporting Services ile hazırlanacak uygulamalara tek ya da farklı veri tabanları üzerinden veri kaynağı gösterilebilir.
• Reporting Services ile web arayüzü olan uygulamalar tasarlanıp bir yönetici paneli üzerinden gerekli işlemler yapılabilir.
• Reporting Services ile geliştirici araçları kullanılarak çok daha karmaşık raporların hazırlanabilmesi mümkündür.
• Reporting Services ile son kullanıcıların rahatlıkla çalışabilecekleri çok basit raporlamalar hazırlanabilir.
• Reporting Services ile raporlama sunucusu yardımı ile ister lokal bir bilgisayar isterde bir web sunucusu üzerinde yer alan bir bilgisayar üzerinden farklı veri kaynaklarından yararlanarak raporlar hazırlanabilir.

Bu gerekli bilgileri edindikten sonra artık yavaş yavaş SSRS uygulamalarını nasıl geliştirebileceğimize göz atmaya başlayabiliriz.

SSRS için geliştirme yapabilmek için ilk olarak adından da anlaşılacağı gibi Reporting Services uygulamasının bilgisayarınızca kurulu olması gerekmektedir. Bu uygulama SQL Server 2005-2008 paketlerinde kurulum esnasında opsiyon olarak gelmektedir. Kurulumdan sonra eğer ki Reporting Services ayarlarını düzenlemek isterseniz başlat menüsünden SQL Server 2008 (2005 te olabilir.)/ConfigurationTools/ReportingServicesConfigurationManager uygulamasından yararlanılır. İlk olarak çıkan ekranda Server ile ilgili bilgileri bizden istemekte, sonraısnda ise düzenleme ekranı karşımızdadır.



Karşımıza çıkan bu sayfa üzerinde hangi veritabanları ile çalışılabileceğini, web sunucunda hangi yol ile çalışılabileceğini, şifreleme kullanılabileceği ve diğer bir çok konuda ayar yapılabilmektedir.

Tabikii biz biraz daha işin yazılım geliştirme tarafında yer alıyoruz. Öyleyse bir geliştirme ortamına ve proje şablonuna ihtiyaç duyulmaktadır. Bu da bizlerin alışık olduğu Visual Studio ortamıdır. Tabii bu proje şablonun gelebilmesi için Sql Server kurulurken aynı isimli klasörün içerisinde yer alan SQL Server Business Intelligence Development Studio ortamınında kurulu olması proje şablonunun yer almasını sağlayacaktır.

Biz bu örneğimizi Visual Studio 2008 ortamı üzerinde yapıyor olacağız. Geliştirme ortamını açtıktan sonra yeni bir proje oluştur diyor ve karşımıza çıkan ekranda Business Intelligence seçeneğinden Report Server Project Wizard 'ı seçiyoruz. Bu seçenek yardımı ile adım adım rapor oluşturabileceğiz.


Not: İlerleyen zaman içerisinde diğer Report Server proje şablonlarınıda inceliyor olacağız.

Proje oluşturulduktan sonra adım adım projeyi oluşturma işlemine başlıyoruz. Veri sunucusunu seçilmesi istenen ekranda gerekli işlemin yapılabilmesi için edit seçeneğini tıkladıktan sonra sunucu adını, veri tabanı adını ve diğer istenen bilgileri girdikten sonra gerekli bilgiler ekrana eklenmiş olacaktır.



Bir sonraki ekranda veri tabanı tablolarında alınacak olan verilerin gösterilmesi için gerekli SQL cümlelerinin hazırlanması olacaktır. İsterseniz karşınızca çıkan ekrandan yararlanarak sorgularınızı yazabilmekle birlikte istersenizde QueryDesigner yardımı ile de kullanabilmeniz mümkündür.



Açılan ekran üzerinde yeni tablo ekle seçeneğini tıkladıktan sonra tabloyu seçiyor ve istediğimiz kolonların gözükmesine olanak tanıyoruz. Bir sonraki adımda tablonun nasıl bir tasarımda olacağı seçilir.



Bir sonraki adımda ise verilerin nasıl kullanılacağı gibi seçenekler yer almaktadır. Hangi veriler için sayfalama yapılacağı, neye göre gruplanacağı ve hangi verilerin detay kısmında yer alacağına ilişkin veriler yer almaktadır.



Verilerin ekranda hangi tablo yapısı ile görüntüleneceğini ve nerede yer alacağını belirledikten sonra en son adıma geçiyoruz.



Bu seçenekte verilerin alt toplamlarının olacak mı, nasıl bir stil ile olsun gibi seçenekleri belirterek devam edebiliriz. Karşımıza gelen en son ekranda raporun ismini belirliyoruz. Sonrsaında istersen işlemlerimizin sonucunda nasıl bir sonuca ulaşacağımızı görmek için ön görüntüleme seçeneğini seçerek sihirbaz yardımı ile ilk raporlama uygulamamızı hazırlamış oluyoruz.


Hazırlamış olduğumuz raporun ekran görüntüsü en temel anlamda yukarıda gördüğümüz gibi olacaktır. Uygulamayı çalıştırdığımız da ise yukarıda dizayn kısmında görmüş olduğumuz görüntü raporlama ekranında yer alacaktır. Bizler için asıl önemli olan bir web sayfası üzerinde nasıl görüntüleyecebileceğimizdir.

SSRS sistemimize kurulduğunda yerel sunucu içerisinde yer alan bir web sistemi yer almaktadır. Bu web sayfası yardımıyla Deploy edilmiş olan raporlama uygulamalarını görüntüleyebiliyoruz. Eğer ki bilgisayarınızda IIS aktif ise http://localhost/report sayfası yardımı ile bu ekranı görüntüleyebilirsiniz.

Şimdi hazırlamış olduğunuz rapor uygulamasını deploy ederek bu sayfa üzerinde görüntülenmesini sağlıyor ve sonrasında da web sayfasını açıyoruz.



Bu ekran yardımı ile hazırlanmış olan raporların görüntülenebilmesi mümkündür.

Bu yazımızda SSRS (SQL Server Reporting Services) ile rapor hazırlamak istediğimizde en temel anlamda neler yapmamız gerektiğini değinmeye çalıştık. Özellikle bir raporlama tool arayışı içinde olanlar ya da hazırlayanlar için kesinlikle incelenmesi gerekmektedir.

Herkese iyi çalışmalar diliyorum.

Umarım yararlı olabilmiştir.

Pazartesi, Ağustos 31, 2009

Windows 7 & Vista – Gadget

Astrazeneca için hazırlamış olduğum gadget sonuçlanmış bulunuyor. Tasarımsal öğeleri de tamamladıktan sonra sizlere makale olarak sunacağım. Şimdilik Gadget panelde yer alan görüntüsünü sizlere sunuyorum.

AZ