Sayfalar

28 Nisan 2009 Salı

23 Mart 2009 Pazartesi

SQL Server'da Trigger

3 çeşit trigger vardır:
1 - Insert Trigger (Tabloda ekleme işlemi olduğu anda)
2 - Delete Trigger (Tabloda silme işlemi olduğu anda)
3 - Update Trigger (Tabloda güncelleme işlemi olduğu anda)

Trigger tetikleyici demektir. Adındanda anlaşılacağı gibi tabloda insert (ekleme), delete(silme) ve update (güncelleme) işlemleri yapıldığı anda yada sonrasında çalışmasını istediğiniz komutları triggerlar sayesinde çalıştırırız. Triggerlar 2 farklı tablo kullanmaktadır. Insert(ekleme) işlemleri için inserted tablosu, delete(silme) işlemleri için deleted tablosu kullanılır. Bir kayıt güncellenirken ise ilk önce deleted tablosunda silinen veri, inserted tablosunda da eklenen veri tutulur.(Yani deleted tablosunda eski veri inserted tablosunda yeni veri)

Konuyu örneklerle inceleyelim.

Trigger eklemek istediğimiz tabloyu solumdaki + işaretinden açıyoruz trigger seçeneğinin üzerine gelip sağ tıklayarak new trigger seçeneğini seçiyoruz.

CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
GO

geliyor. Şimdi gerekli alanları nasıl dolduracağımızı ihtiyaçalarımıza göre belirleyeceğiz.

12 Mart 2009 Perşembe

Tabloda Identity Değerini Düzeltme

Örneğin bir tablonuzda otomatik artan ID isimli bir kolonunuz var ve bu tablodaki kayıtlarınızdan bir kaçını veya tümünü sildiğinizde ID nin 1 den başlamak yerine daha büyük bir sayıdan başladığını yada 1,2,3,4 diye giderken sildiğiniz satırlar 5,6,7 ise yeni kayıdın 8 den başladığını görürsünüz.Siz tekrar 5 den devam etmek istiyorsanız aşağıda vermiş olduğum örneği kullanabilirsiniz. 4 örnektir kaçıncı kayıttan başlamasını istiyorsanız o numarayı vermeniz gerekmektedir.

USE DATABASENAME
DBCC CHECKIDENT (@tablename, RESEED, 4)--4:en son kalan id no (devam etmesi istenen id numarası (5 den devam edecektir))
DBCC CHECKIDENT (@tablename)

/*SP ÖRNEĞİ*/
CREATE PROCEDURE UpdateIdentity
@tablename nvarchar(255)--tabloAdı parametre olarak geliyor
AS
DECLARE @ident_seed int
SET @ident_seed = IDENT_SEED(@tablename)
DBCC CHECKIDENT (@tablename, RESEED, @ident_seed)
DBCC CHECKIDENT (@tablename)
GO

11 Mart 2009 Çarşamba

21 Ocak 2009 Çarşamba

Date Format

SELECT CONVERT(VARCHAR,kolonAdi,101) FROM tabloAdi
SELECT CONVERT(VARCHAR,getDate(),101)
0 veya 100 mon dd yyyy hh:miAM (veya PM)
101mm/dd/yy
102yy.mm.dd
103dd/mm/yy
104dd.mm.yy
105dd-mm-yy
106dd mon yy
107Mon dd, yy
108hh:mm:ss
9 veya 109 mon dd yyyy hh:mi:ss:mmmAM (veya PM)
110mm-dd-yy
111yy/mm/dd
112yymmdd
13 veya 113 dd mon yyyy hh:mm:ss:mmm(24h)
114hh:mi:ss:mmm(24h)
20 veya 120 yyyy-mm-dd hh:mi:ss(24h)
21 veya 121 yyyy-mm-dd hh:mi:ss.mmm(24h)
126yyyy-mm-dd Thh:mm:ss.mmm(boşluk yok)
130dd mon yyyy hh:mi:ss:mmmAM
131dd/mm/yy hh:mi:ss:mmmAM


Some other functions that can be used for various purposes are DATEADD, DATEDIFF, DATENAME, DATEPART, DAY, GETDATE, MONTH, and YEAR. Here's some further detail on these functions as well as a code sample showing their use:

Dateadd: Returns a new datetime value based on adding an interval to the specified date.

Syntax: DATEADD ( datepart, number, date )

Datediff: Returns the number of date and time boundaries crossed between two specified dates.

Syntax: DATEDIFF ( datepart, startdate, enddate )

Datename: Returns a character string representing the specified datepart of the specified date.

Syntax: DATENAME ( datepart, date )

Datepart: Returns an integer representing the specified datepart of the specified date.

Syntax: DATEPART ( datepart, date )

Day: Returns an integer representing the day datepart of the specified date.

Syntax: DAY ( date )

Getdate: Returns the current system date and time in the Microsoft® SQL Server™ standard internal format for datetime values.

Syntax: GETDATE ( )

Month: Returns an integer that represents the month part of a specified date.

Syntax: MONTH ( date )

Year: Returns an integer that represents the year part of a specified date.

Syntax: YEAR ( date )

16 Ocak 2009 Cuma

Cannot serialize the DataTable. DataTable name is not set.

DataTable tanımlaması yaparken tablo adı belirtmezsek "Cannot serialize the DataTable. DataTable name is not set." hatası ile karşılaşırız.

DataTable dt= new DataTable();
dt.TableName="deneme";
ile sorun çözülür

15 Ocak 2009 Perşembe

asp:GridView de satır seçilince Select Command kullanımı

(Select a row in an asp:GridView without using a Select Command)

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
     e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(this.gvTest, "Select$" + e.Row.RowIndex);
}

grid row select,sort

Gridview de satıra tıklandığı anda kaydınızın seçilmesiniz istiyorsanız eklemiş olduğunuz gridviewin eventlerinden RowDataBound a aşağıdaki kodu eklemeniz yeterli olacaktır.

protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
     e.Row.Attributes["onclick"] = ClientScript.GetPostBackClientHyperlink(this.gv1, "Select$" + e.Row.RowIndex);
}

Gridviewde bir kolona göre sıralama yapılmasını istiyorsanız gridviewin eventlerinden Sorting eventine aşağıdaki kodu yazmanız yeterli olacaktır.

protected void gv1_Sorting(object sender, GridViewSortEventArgs e)
{
     gv1.Sort("sendDate", SortDirection.Ascending);
}

http://msdn.microsoft.com/tr-tr/netframework/default(en-us).aspx
http://msdn.microsoft.com/en-us/library/system.web.ui.page.getpostbackclienthyperlink.aspx

8 Ocak 2009 Perşembe

Text dosyasından verileri okuyarak veritabanından çektiğimiz veriler ile replace etmek

Örneğin products.txt'de dosyamızda ürün özellikleri Ürün Adı=[PRODUCTNAME],Telefon Hafızası=[MEMORY],Maximum Hafıza Kartı Boyutu=[MAXMEMORYLENGTH] şeklinde tutuluyor olsun.


private static string txtFileReplace(DataTable dt)
{
StreamReader streamReader = new StreamReader("products.txt");
string data = streamReader.ReadToEnd();

int startIndex = -1;
int endIndex = -1;
char startChr= '[';
char endChr= ']';
string columnName = "";
string value = "";
while (data != null)
{
startIndex = data.IndexOf(startChr);
if (startIndex == -1)
return data;

endIndex = data.IndexOf(endChr, startIndex + 1);
if (endIndex != -1)
{
int length = endIndex - startIndex;
columnName = data.Substring(startIndex, length + 1);//[PRODUCTNAME] şeklinde veriyi alır
value = data.Substring(startIndex + 1, length - 1);//PRODUCTNAME şeklinde veriyi alır
value = dt.Rows[0][value].ToString();//veri tabanından veri çekiliyor
data = data.Replace(columnName, value);//[PRODUCTNAME] çekilen veri örneğin "Nokia 5510" ile replace ediliyor.
}
}
return data;
}

2. yöntem ise bu işlemin tam tersini yapmak yani veri tabanından alınan veriyi text dosyasında değiştirmek. Sanırım bu yol daha kısa ve daha sağlıklı ;)


private static string txtFileReplace(DataTable dt)
{
string data = System.IO.File.ReadAllText("products.txt");
string replaceValue ="";
string newValue = "";
for (int i = 0; i < dt.Columns.Count; i++)
{
replaceValue = "[" + dt.Columns[i].ColumnName + "]";
newValue = dt.Rows[0][i].ToString();
data = data.Replace(replaceValue, newValue);
}
return data;
}

7 Ocak 2009 Çarşamba

Confirm MessageBox .net

if(!IsPostBack)
      btnDelete.Attributes.Add("onclick","return confirm('Silmek istediğinizden emin misiniz?');");

Ajax ile yapılmış bir başka örnek. İncelemek için tıklayın.