Sayfalar

18 Eylül 2019 Çarşamba

Wep Api Error: No action was found on the controller


{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:57193/api/PostFlight/GetByFlightNum/34'.","MessageDetail":"No action was found on the controller 'PostFlight' that matches the request."}


** Çözüm:
routeTemplate: "api/{controller}/{action}/{param}",

Controller içersindeki sorgu fonksiyonlarında ki verilen parametre adı ile config dosyasındaki {param} değişkeninin adı aynı olmalıdır.

Tarihi Excel Serial Number Formatına dönştürmek ?


DATE To OLE


        DateTime MyDate = new DateTime(1904, 12, 12, 1,4,1);
        double MyDouble = MyDate.ToOADate();
 
 
From OLE to DATE
 
        double MyOADate = 831.01289631332;
        DateTime MyDate = DateTime.FromOADate(MyOADate);
 
 
 
 

16 Eylül 2019 Pazartesi

Assing An IP For IIS Website And Open A Port For IIS

IIS (Internet Information Services) allows you to access your website via an IP address. To achieve this, you just have to bind your website to a non-standard port along with public IP address of your VPS. This is more helpful when you want to check your website functionality before making DNS (nameservers) changes, and you have not configured any nameservers yet. You can follow below tutorial to configure IIS to access a website via IP address.

Add a Binding in IIS

  1. Login into your Window server via Remote Desktop.
  2. Go to StartAdministrative Tools → Internet Information Services (IIS) Manager.

    Launch IIS Manager
  3. In the Connections pane of IIS, expand the Sites and select the website which you want to access via IP address.

    Select Website
  4. Click on Bindings link and you will see current bindings of that website.

    Select Bindings
  5. Click on Add button to add a new binding.

    Add Binding
  6. On the Add Site Binding window, keep website Type as http. Select an IP address from the drop-down menu upon which you want to bind the website. Since other websites (along with their Host Header Values) are already bound on port 80, you won't be able to bind this new website on port 80 without Host Header Value (Host name). So, specify a port number (other than default port 80) on which you want to bind this new website. Keep Host name as blank, click OK and then Close. Once the binding is added in IIS Manager, the next step is allowing a port in Windows Firewall.

    Add Site Binding

Open a Port in Windows Firewall


  1. Go to StartAdministrative Tools → Windows Firewall with Advanced Security.

    Windows Firewall
  2. At Windows Firewall window, click on Inbound Rules.

    Inbound Rules
  3. Under Actions pane, click on New Rule and New Inbound Rule Wizard will be opened. On this window, select the Port radio button and click on Next.

    Allow Port
  4. On the next screen, select TCP and Specific local ports radio button. Specify a port number (upon which you set binding in IIS) in Specific local ports field and click Next.

    New Inbound TCP Port Rule
  5. On the next screen, select Allow the connection and click Next.

    Allow Connection

  6. Select the profile where you want to apply this rule and click Next.

    Rule Wizard
  7. Specify Name and Description for the newly created rule & click Finish.


IIS LoginFailed


On Windows10
Error: The login failed.\r\nLogin failed for user 'IIS APPPOOL\\xxx'."

on Server 2012R2
Error: System.Data.Entity.Core.EntityClient.EntityConnection.Open(); Entity Framework Exception “The underlying provider failed on Open


For a local SQL Server:
  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server.
  • Open the Security folder at the server level and not the security folder for the database.
  • Right click on the logins and select New Login.
  • For the login, type IIS APPPOOL\AppPoolName and DO NOT CLICK SEARCH and select OK (If a search is executed, it will resolve to an account with ServerName\AppPool Name and SQL will be unable to resolve the account’s SID since it is virtual)
  • User MappingPage>Select Database > Set User IIS APPPOOL\AppPoolName; setDefault Schema> dbOwner
  • Select the defaults for the account and select OK to close dialog
The same can be accomplished using T-SQL:
CREATE LOGIN [IIS APPPOOL\AuthTest] FROM WINDOWS;
CREATE USER AuthTest FOR LOGIN [IIS APPPOOL\AuthTest];
For a remote SQL Server:
  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server.
  • Open the Security folder at the server level and not the security folder for the database.
  • Right click on the logins and select New Login.
  • For the login, type Domain\ServerName$ and DO NOT CLICK SEARCH
  • Select OK
  • Select the defaults for the account and select OK to close dialog
















IIS Hatası 0x80070021







HTTP Hatası 500.19 - Internal Server Error

Sayfayla ilgili yapılandırma verileri geçersiz olduğundan istenen sayfaya erişilemiyor.

Ayrıntılı Hata Bilgileri:

Modül   IIS Web Core
Bildirim   BeginRequest
İşleyici   Henüz belirlenmedi
Hata Kodu   0x80070021
Yapılandırma Hatası   Bu yapılandırma bölümü bu yolda kullanılamaz. Bu durum, bölüm üst düzeyde kilitlendiğinde oluşur. Kilitleme varsayılandır (overrideModeDefault="Deny") ya da overrideMode="Deny" veya eski allowOverride="false" olan bir konum etiketiyle özel olarak ayarlanmıştır.
Yapılandırma Dosyası   \\?\C:\SunWepApi\web.config



Programs and Features > Turn Windows features on or off > Information Information Services > World Wide Web Services > Application Development Features > Select ASP.NET 4.5

15 Eylül 2019 Pazar

Wep Api




ASP.net ve Web API

Bu makalede Web API ve SQL Server kullanarak örnek veritabanı Northwind üzerinden bir uygulama yapacağız. Bir Model ve Controller kısmımız olacak. View’i ise client olarak düşünebiliriz. Amacımız bir kategoriler controller’ı ile kategorileri görüntülemek olacak.

Web API nedir?

Web API bir web servisi teknolojisi, RESTFull bir servisdir.
ASP.net ise Microsoft’un ürettiği bir web geliştirme platformudur.
İçerisinde bir MVC yapısı barındırmaktadır.
Web API teknolojisini kullanarak kullanıcıyla anında iletişime geçebilen Real-Time applicationlar yapabilabilir.

SOA, SOAP ve RESTFull

SOA benzetecek olursak Object Oriented gibi bir yazılım geliştirme yaklaşımıdır.
Service Oriented Architecture olarak kısalttığımız bu yapı bildiğimiz web servisleri içeriyor.
Bu yapının altında SOAP ve Restfull dediğimiz yapılar var.
Gerekli yapıların birbiriyle entegrasyonunu sağlamak için kullanılıyor.
Basit bir şekilde şöyle düşünebiliriz: Projelerde kullandığımız çok katmanlı mimaride business logic katmanı ile data layer’ı ayrı bir proje yaparak bunu web ortamında sunuyoruz.
Client tarafı ise bunlardan bağımsız oluyor. Sonuç olarak client ve web servis tarafını birbirinden ayırıyoruz.
SOAP – Simple Access Object Protocol – Bu yapının belli başlı standartları var.
Güvenlik, performans. WCF .net tarafında kullanılıyor. Tamamen bir XML çıktısı üretiyor.
Bu XML ise aslında envelop tagleri arasında bir header ve body nin bulunduğu bir yapı.
Bununla belli başlı uygulamaları haberleştirebiliyoruz.
Restfull ise daha sonra ortaya çıkan bir teknoloji. Temsili durum transferi (representational state transfer) anlamına geliyor. Çok esnek ve rahat tamamen HTTP protokolüne odaklı. SOAP’da TCP HTTP tercihi yapabilirken burada tamamen HTTP üzerindeyim bunun artısı da web üzerinde çok rahat bir şekilde Web API tarafında kullanabileceğim bir yapı olması oluyor.
Restfull servislerin döndürdüğü veri tipi konusunda katı kuralları yok. İstenilen formatta geri dönüş sağlayabiliyor. Güvenlik anlamında ise birez zayıf o yüzden kendi güvenlik yapılarımızı inşa etmemiz gerekebiliyor. Günümüz teknolojilerinde bunun da daha rahat yolları var.
Servis mimarilerinde kritik nokta platform bağımsız biçimde çalışabilmek. Dönen json data Java’da,PHP’de, .Net de okunabiliyor. JSON web ortamında hızlı javascript’e entegre. Performans açısından boyut çok önemli.
XML:
JSON:
  • Burada name etiketi XML’de iki defa kullanılırken JSON gösteriminde bir defa kullanılıyor dikkat ederseniz.
  • Mobil burada bir diğer kritik noktayı oluşturuyor. Çoğu mobil uygulama servisle haberleşmek durumunda. Servis kullanıldığında Android, iOS olması fark etmiyor.
    Her işimizi JSON objeleriyle görebiliyoruz.
  • Web API performans olarak avantajları arasında caching ve asenkron yapılar yine söz konusu.
  • JSON kullanımına şöyle bir örnek verilebilir: ASP.net 4’de config yapısı XML formatındadır. Artık ASP.net 5’de bu bile JSON’a döndü.
  • Biz de projemiz içerisinde veritabanından çektiğimiz verileri JSON formatında dışarıya servisle açıp yine dışarıdan gelen JSON objelerini database’imize kaydedeceğiz.
  • Proje içerisinde NORTHWND veritabanını kullanacağız. SQL Server ve Northwindveritabanının hazır olması gerekiyor.
  • Management Studio ile veritabanımızı bir kontrol edelim. Daha sonra bu kısımda sıkıntı yaşamak istemiyoruz çünkü.
    • Örneğin servisin aşağıdaki gibi açık olması gerekiyor.

Projenin Oluşturulması

  • File > New > Project diyerek projemizi oluşturmaya başlayalım. Web altında ASP.NET Web Application seçip isim veriyorum.
  • Empty Template altından Web API‘ı açıyorum. Özellikle öğrenirken boş template üzerinden gitmek daha faydalıdır.
  • Bir MVC projesi açıldığında bunun bir tarafında da bir web servisi de host edilebilir. Ama bu çok ihtiyacımız olan bir yapı olmuyor. Ama böyle bir imkan var ihtiyaç olursa.
  • Solution Explorer‘da gördüğünüz gibi MVC’den alışkın olduğumuz Model‘lar Controller‘lar var ama gördüğünüz gibi bir View yok. View kısmı client olarak düşünülebiliriz.
  • Models içerisine Orm ve Dto klasörleri oluşturalım. Entity Framework yapısını Orm klasörünün içerisinde, Data Transfer Objelerimiz olacak Dto’ları da Dto klasörü içerisinde saklayacağız.

Database ve ORM

  • Orm içerisine Add>New Item diyerek Data sekmesi altında ADO.net Data Entity Model ekleyelim. Northwind örnek database’i ile çalışacağız.
  • Gelen pencerede EF Designer from database seçili direk Next diyoruz. New Connection dedik.
  • Server Name kısmına . yazıp Windows Authentication‘u seçelim. Database olarak NORTHWND‘ı seçip onaylayalım.
  • Entity Framework 6.x versiyonunu kullanıyoruz. Yalnızca Tables diyerek tabloları ekleyelim.
  • İşlem tamamlandığında database bağlantısı gerçekleştirilip gerekli ORM yapısı kurulmuş oldu. Artık kodumuzu yazmaya başlayabiliriz.

Controllers Sınıfı

  • Controllers klasörü içerisine yine Add>New Item diyerek bir Web API 2 Controller - Empty controller oluşturalım.
  • Bu controller kategorileri döndürecek. İsim olarak CategoryController verelim. Namespace tanımlamaları altında karşımıza gelen böyle bir yapı oldu:
  • Bunun bir Web Api olmasını sağlayan ApiController class’ının içerisindeki yapılar.
  • Entity’den instance alalım öncelikle. Web.config içerisinde <connectionstrings> altında <add name="NORTHWNDEntities"... ile NORTHWNDEntities olarak gözüküyor. Namespace’imizi ekliyoruz.
1
2
3
4
5
6
7
8
9
10
11
12
using _1110_WebApi.Models.Orm;
 
// ...
 
namespace _1110_WebApi.Controllers
{
    public class CategoryController : ApiController
    {
        NORTHWNDEntities db = new NORTHWNDEntities();
 
    }
}
 
 
 
Bu controller’a kategoriler için gerekli işlemleri yapacak metodları yazacağız. Kategorileri getirmek ile başlayalım. Fakat kategorileri getirecek metodu tanımlamadan önce yapmamız gereken bir şey var.

DTO – Data Transfer Objesi

  • Bir servis kullanıyorsak gerek güvenlik gerekse performans anlamında bir data transfer objesi kullanmalıyız. Örneğin Product class’ına baktığımız zaman çok sayıda property’si olduğunu görüyoruz. Şimdi bu noktada bir servisi dışarıya açarken ben hepsini birden dışarıya açmak istemeyebiliriz. Bu güvenlik açısından işimize gelmeyebilir. Karşı tarafın buna ihtiyacı olmayabilir. Sunucumuzun performansını buna harcamak istemeyebiliriz. Bu noktada da ben bu değerleri bir transfer objesi üzerinden bunları dışarıya açacağız.
  • Bunun için Dto klasörünün içerisine CategoryModel isimli bir class oluşturalım. İçerisine aşağıdaki gibi gerekli propertyleri giriyorum.
  • prop yazıp iki kere tab tuşuna basarsanız daha hızlı eklemeniz mümkündür. Visual Studio içerisinde bunlara snippet denir. ctrl+k ctrl+x yaparak diğer snippetleri görebilirsiniz.
  • Ne yaptık? CategoryModel adında bir Dto ve iki adet property’sini oluşturduk. Şimdi artık dışarıya açacağımız Model’in tipini CategoryModel olarak seçeceğiz.
  • ORM’nin içerisindeki Category class’ı üzerinden değil de CategoryModel class’ı üzerinden veri çıkışını gerçekleştireceğiz.
  • Artık Controller içerisine geri dönebiliriz. CategoryModel’leri barındıran bir list döndürecek aşağıdaki fonksiyonu oluşturalım.
  • Yukarıdaki tanımlanan GetAllCategories bütün kategorileri döndüren bir metod.
  • Bu metod içerisine List<CategoryModel> catlist = db.Categories.ToList(); dersek db.Categories.ToList() ile bütün kategorileri döndürmüş oluyoruz.
  • Bunun yerine ToList() demeden önce buna bir select yaparak CategoryModel tipinde bu listeyi çekeceğiz.
  • İçerisinde DTO’nun KategoriAdi ve Aciklamasi propertylerini databaseden gelen CategoryName ve Description kategorilerine eşleyeceğiz.
  • Bu liste artık bana KategoriAdi ve Aciklamasi databaseden gelen değerlerle dolu bir liste halinde sunulacak.
  • Bu listeyi de return edeceğiz.

XML Yerine JSON ve Route Ayarları

  • Bu aşamada projeyi Build edip çalıştırdığımızda karşımıza çıkan sayfada HTTP Error 403.14 - Forbidden hatası alıyoruz.
  • Fakat /api/category dediğimiz takdirde xml formatında database’imdeki bütün kategorileri dışarıya açmış oldum.

  • Peki burada iki action olsa ne olacaktı? Category altında birden fazla fonksiyon da olabilir.
  • Bu noktada da App_Start altında WebApiConfig.cs içerisinden yapacağımız rootconfig yapılandırması ile beraber action adını da istiyoruz.
  • WebApiConfig.cs içerisinde routeTemplate: "api/{controller}/{id}", satırını routeTemplate: "api/{controller}/{action}/{id}", ile değiştirelim.
  • Artık action adı olan GetAllCategories‘i de URL’e eklememiz gerekecek.
  • /api/category/GetAllCategories dediğimizde yine önceki değerleri görüntülebiliyoruz.
  • Bu noktada az önceki gibi bütün kategorilere rahatlıkla erişebiliyorum ve daha sonra yazacağım ikinci bir metoda da rahatlıkla erişebileceğim.
  • XML yerine JSON döndürmek için yine aynı dosyada // Web API configuration and services diye belirtilmiş kısmın altında,
Yukarıdaki satırı ekleyerek default olarak belirtilen XML yapısını temizlediğim takdirde bu sefer bana JSON döndürecektir.

  • Eğer id’sine göre tek bir kategori döndürmek istiyorsak GetAllCategories dışında yeni bir metod tanımlamamız gerekiyor.
  • Bunun için CategoryController.cs dosyamızı açalım. GetAllCategoriesden sonrasına GetCategoryByID fonksiyonu tanımlayalım.
  • Yeni fonksiyonumuz tek bir kategori döndüreceğinden bildirilmesi public CategoryModel GetCategoryByID(int id) şeklinde olacak.
  • Dışarıdan da parametre olarak id alıyor.
  • Dışarıdan aldığımız bu idye göre de database’den de o id’li kategoriyi yakalayacağız.
Peki bu id nasıl gelecek? Hatırlarsanız WebApiConfig içerisindeki default yapılandırmada bir id vardı:
Buradaki id sayesinde bu id atanacak.
  • Artık /api/category/getCategoryByID/2 diyerek id’si 2 olan kategoriyi döndürebilirim.
  • Burada önemli bir nokta metodun adının başındaki Get‘in request’in tipini belirten bir anahtar kelime olmasıdır.
  • O Geti sileresek metodun get requesti olduğu anlaşılmaz. Örneğin metodu CategoryByID olarak değiştirirsek çalışmayacaktır:
  • Bundan kaçınmanın bir diğer yolu ise metodun başında tipini belirtmektir:
  • Bu şekilde yazdığımızda metodun isminin başında Get yazmasa da çalışacaktır.
  • Özel bir neden yoksa ilk seferdeki gibi metodun isminde belirtmek daha doğru olacaktır.
  • Fiddler, Postman gibi toollarla GET requesti gönderip sonucu inceleyebiliriz.

  • 200 status kodu isteğin (request) başarılı olduğu anlamına gelir.

  • Yukarıda response’u yani sunucunun verdiği cevabı ham haliyle görebiliyoruz. İlk satır status code bilgisi, altındakilerin ise HTTP headerları olduğunu görüyoruz.
    Bu bilgiler gelen verinin künyesi gibi düşünülebilir.

POST Metodu ile Database Insert İşlemi

  • Bu noktaya kadar yalnızca GET metodlarıyla çalıştık. Ama HTTP yalnızca GET metodlarıyla sınırlı değil.
  • POST metodu ile gönderdiğimiz veriyi database’imize kaydetmeyi deneyelim.
  • Northwind içerisinde categories tablosuna bakacak olursak:

  • Bu tablo içerisine kategori ekleyeceğiz. Öncelikle CategoryController.cs dosyamıza bir POST metodu yazalım.
  • Metodun dönüş tipi IHttpActionResult olacak. Bu tamamen arkada asenkron çalışan bir yapıya sahip bir action result tipi.
  • Metodun ismini AddCategory yapalım. Adında bir POST anahtar kelimesi kullanmadığım için attribute olarak üstünde bunun bir POST metodu olduğunu belirtmeliyiz.
İçerisine yazacağımız return statement’da ise return Json(""); gibi bir dönüş yapabiliriz.
Ama bundan ziyade return Ok(); diyebiliriz. Burada ok dediğimiz 200 status kodlu herşey yolunda cevabı oluyor.
Buradan benzer şekilde birçok HTTP word’ünü –NotFound() veya BadRequest() gibi- döndürmek mümkündür.
Fonksiyonumuza parametre olarak ise Dto’da belirttiğimiz CategoryModel tipinde bir nesne veriyoruz.
İçerisinde database ile bağlantı kurulacak bölümü yazmadan önce nesnenin dolu geldiğini görüyor olmam gerekiyor.
Debug modunda fonksiyona breakpoint koyup çalıştırdıktan sonra. Fiddler veya Postman’den aşağıdaki adrese altındaki içeriği gönderelim.
Request’i gerçekleştirirken Content-Type:application/json header’ını da belirtmemiz gerekiyor.
İlgili url’e bir request gerçekleştiğinde uygulamamız bunu yakalayacak.

  • Yukarıda request ile gönderilen verinin başarıyla obje içerisine geçmiş olduğunu görüyoruz.
  • Şimdi gönül rahatlığıyla database’e kaydetme işlemini gerçekleştirebiliriz.
  • Tekrar aynı request’i gönderirek bu sefer veritabanına kaydedildiğini görüyoruz.
  • Böylece temel veritabanı işlemimizi gerçekleştirdik.

Cross Origin (CORS) – Başka Domainden Erişme

  • Geliştirdiğimiz API’ye client tarafından erişmek istediğimizde şöyle bir hata ile karşılaşmamız olasıdır:

  • Bu bir güvenlik mekanizması aslında. API’mize yabancı bir adresten erişilmesi durumunda browser http header’ında bunun için bir izin arıyor. Bu noktada servisten tüm client’ların veri okumasına izin verebiliriz. Böylece yalnız kendi domaininden değil internetteki başka biri de bu bilgiye erişilebilir.
  • Bunu da Web.config dosyası içerisinden <system.webServer> altına şu satırları ekleyerek yapacağız:
  • Artık servisten herhangi bir data get etmek isteyen herkese erişim izni veriyoruz.
  • Buradaki * isteyen herkesin bu dataya erişebilmesi anlamına geliyor.
  • Bu noktada server tarafında gereken işlemleri tamamladık. Artık geriye aşağıdaki gibi bir client aracılığıyla veriyi düzenlemek kalıyor.

  • Client için bir MVC projesi oluşturabilir veya basit bir web sayfası kullanarak ajax ile erişim sağlayabiliriz.
  • Client tarafı bir Android uygulaması da olabilir. Burada önemli olan web api ile bir API oluşturup araya bir katman sokarak bir soyutlama sağlamış olmaktır. Ardından ise bu katmanın güvenliğini sağlamak gerekir.
  • Client kısmını ise bir sonraki yazıda ele alacağız.
  • ASP.net’in sitesine girdiğimizde gerek Web API gerekse MVC konusunda gerekli dökümanlara ulaşabiliriz.
 

9 Eylül 2019 Pazartesi

SQL View Tablolar


View Özellikleri:
- Genellikle karmaşık sorguların tekbir sorgu haline getirilip kullanılmasıdır.
- Bu amaçla raporlama işlemlerinde kullanılmaktadırlar.
- Aynı zamanda güvenlik amacı ile orjinal VT 3. kişilerden korunması amacı ile de kullanılmaktadırlar.

-Herhangi bir sorguyu tablo haline getirirek , bu tablo üzerinden işlemler yapabiliriz.
-ÖNEMLİ!: Insert, Update, Delete sorguları ile bu tabloda değişiklikler yapılabilir fakat bu değişiklikleri fiziksel tabloya yani gerçek verinin çekildiği tabloya yansıtılar. 
-View yapıları fiziksel yani VT'ınına kaydedilen tablolardır.
-View'lar normal tablolara göre daha yavaş çalışırlar.
-View içinde OrderBy kullanılamaz! Ancak View üzerinden Select alınırsa kullanılır.
    SELECT * FROM  VW_SATISTOPLAMI  ORDER BY Total vb...


CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition




ÖRNEK 1:

CREATE VIEW SampleViewOfPersoneller AS
SELECT * FROM Personeller

----------------------------------------------------------- 

Önemli!! Eğer View üzerinde bir alan değiştrilirse Personeller tablosunda da bu alanlar değişecektir!!
UPDATE SampleViewOfPersoneller SET Adres='Şişli 19 Mayıs Mah.'  

WHERE komutunu UNUTTUNUZ Orjinal Personeller Tablosunda ki tüm tablo verileri değişti!! Yedek almadıysanız Geçmiş olsun!!

Ana Tabloda bir değişiklik yapıldığında Örn bir kolon tipi değiştiğinde bu tabloyu kullanan View'larda hata alarız. Bunu önleme için oluşturulan view'lar With Schemabinding komutu ile yaratılırsa, Ana tabloda bir değişiklik yapılırken etkilenen tablolar için bir uyarı alabiliriz. Creat sırasında Ana tablo çağırılıken dbo. namespace'i ile çağrılmalıdır.


CREATE VIEW SampleViewOfPersoneller AS
WITH SCHEMABINDING
SELECT * FROM dbo.Personeller


-------------------------------------------------------------- 


ÖRNEK2:

CREATE VIEW VW_SATISTOPLAMI AS

SELECT P.Adi,P.SoyAdi, SUM(SD.BirimFiyati*SD.Miktar) Total FROM Personeller P
JOIN Satislar S ON S.PersonelID= P.PersonelID
JOIN [Satis Detaylari] SD ON SD.SatisID= S.SatisID
GROUP BY P.Adi,P.SoyAdi



 

TSql - Constraints


CONSTRAINTS

Contraints tablolarda ki kısıtlamaları, kuralları belirlemek için kullanılırlar. Genellilke tablo yaratılırken yada alter komutu ile kullanılırlar.

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);



ALTER TABLE TableName
ADD CONSTRAINT ConstraintName TYPE  Value  FOR ColumnName


  • DEFAULT - Varsayılan bir değer atar.
  • CHECK - Veri işlenmeden önce belirtilen şarta uygunluğunu kontrol eder.
  • NOT NULL - Kolonun mutlaka bir değer alacağını belirtir.
  • UNIQUE - Kolondaki tüm değerlerin tekil olacağını belirtir.
  • PRIMARY KEY -Kolonda yer alacak her bir satır için özel bir anahtar üretir.
  • FOREIGN KEY -Diğer tablodaki bir primary keyîn ilişkisel olarak bu tabloya eklenmesini sağlar
  • INDEX - Daha hızlı veri çekilmesini sağlar.


Örnek:
DEAFULT***********

ALTER TABLE CUSTOMERS
ADD CONSTRAINT TitleConstDF DEFAULT ('Mr') FOR Title


Örnek:
CHECK***********

ALTER TABLE CUSTOMERS
ADD CONSTRAINT AgeConst CHECK (Age>=18)

**Önemli Not: Eğer Check Constrait oluşturulurken ilgilil tabloda bu şarta uymayan veriler varsa Check Constrait oluşturulmayacaktır. Bunu aşmak içinse With NoCheck ile kullanılmalıdır.

Hata Kodu:
Msg 547, Level 16, State 0, Line 38
The ALTER TABLE statement conflicted with the CHECK constraint "AgeConstBelow". The conflict occurred in database "TESTDB", table "dbo.Customers", column 'Age'.


ALTER TABLE CUSTOMERS 
WITH NOCHECK ADD CONSTRAINT AgeConstBelow CHECK (Age<=18)

Örnek:
UNIQUE*************

ALTER TABLE Customers
ADD CONSTRAINT TCUniConst UNIQUE (TCKimlik); 






TSQL- DDL (DATA DEFINATION LANGUAGE)


-----------------------------------------------------*--------------------------------------------------------------------

CREATE 

Yeni bir Veri tabanı ekler.

CREATE DATABASE testDB;

-----------------------------------------------------*--------------------------------------------------------------------

DROP

Mevcut veritabanını siler.
DROP DATABASE testDB;


Mevcut tabloyu siler.
DROP TABLE testTable;

Mevcut Constrainti Siler
ALTER TABLE TableName
DROP CONSTRAINT MyConnstraits


 
-----------------------------------------------------*--------------------------------------------------------------------

TRUNCATE

Mevcut  tablo içerisndeki verileri siler.
TRUNCATE TABLE testDB;



-----------------------------------------------------*--------------------------------------------------------------------

BACKUP

Mevcut veritabanını belirtilen yola yedekler
.
BACKUP DATABASE databasename
TO DISK = 'filepath'



BACKUP DATABASE databasename
TO DISK = 'filepath'
WITH DIFFERENTIAL;  



USE MotherShip
BACKUP DATABASE MotherShip
TO DISK ='C:\Users\HABILGUR\Desktop\Cat\MotherShip.bak'



 -----------------------------------------------------*--------------------------------------------------------------------

CREATE TABLE

Mevcut Veritabanına tablo ekler.........................

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
); 




CREATE TABLE Customers (

CustomerID int Primary Key Identity(1,1) ,
FirstName nvarchar(40) NOT NULL,
LastName nvarchar(50),
Title varchar(4),
[Last Visit] datetime,



-----------------------------------------------------*--------------------------------------------------------------------

ALTER TABLE

Mevcut Tabloya yeni bir kolon eklemek ,değiştirmek yada silmek için kullanılır.

ALTER TABLE table_name
ADD column_name datatype


ALTER TABLE CUSTOMERS
ADD Email nvarchar(50)


 ---------

ALTER TABLE table_name
DROP COLUMN column_name;

ALTER TABLE CUSTOMERS
DROP COLUMN Email 


 --------------------


ALTER TABLE table_name
ALTER COLUMN column_name datatype;


ALTER TABLE CUSTOMERS
ALTER COLUMN Email nvarchar(50)



--------------------

Mevcut Constrainti Siler 

ALTER TABLE TableName
DROP CONSTRAINT MyConstraits





8 Eylül 2019 Pazar

STORED PROCEDURES


STORED PROCEDURE

Parametresiz Procedure

CREATE PROC SelectAllCustomers
AS
SELECT * FROM Customers
GO;

.
.
.
.

EXEC SelectAllCustomers;



Parametreli Str. Procedure

CREATE PROC SelectAllCustomers
(
  @City nvarchar(30)
)
AS
SELECT * FROM Customers WHERE City = @City
GO;

.
.
.
.
EXEC  SelectAllCustomers City='Berlin'


ÖRNEK:

create PROCEDURE sp_CustSatisToplamBwDates 
(
@DateBegin datetime
@DateEnd datetime
)
AS
SELECT SUM(SD.BirimFiyati*SD.Miktar) AS TOTALSATIS FROM Personeller P
INNER JOIN Satislar S ON S.PersonelID=P.PersonelID
INNER JOIN [Satis Detaylari] SD ON SD.SatisID= S.SatisID
WHERE S.SatisTarihi>=@DateBegin and s.SatisTarihi<=@DateEnd
GO



ÇAĞIRILIŞI:


exec CustSatisToplamBwDates @DateBegin='1989-01-01',@DateEnd='2000-01-01' 

 

MVC LOADING TOO SLOW ISSUE