RSS
 

Archive for the ‘MsSQL’ Category

PHP & Ms SQL Server 2008 Kullanımı

10 Aug

Bilindiği üzere Microsoft IIS(Internet Information Services) 6.0 ve 7.x sürümlerinde artık PHP’ye destek vermektedir. Bununla da kalmayıp SQL Server 2005/2008 ile daha kolay işlem yapmamızı sağlayan “SQL Server Driver For PHP” extension’nı geliştirmiştir. Daha öncede bahsettiğim gibi IIS üzerine PHP kurmak istiyorsak, Windows Server’lar için özel olarak geliştirilen PHP sürümleri üzerinede çalışmalar başlamıştır. VC9  ile geliştirilmekte olan bu PHP sürümlerine http://windows.php.net adresinden ulaşabilirsiniz.

SQL Server Driver For PHP eklentisini IIS 7.x kullanıyorsanız Web Platform Installer ile kurabilirsiniz. Bu eklenti PHP üzerine kurulan curl veya zip kütüphanelerinden farkı yoktur. Aynı diğer eklentiler gibi bir DLL(Dynamic-link library) olarak extension klasörüne atılmakta ve php.ini ayar dosyamızdan diğer eklentiler gibi tanıtılmaktadır. Tek farkı şuan yeni olmasından ve çok yaygın kullanılmamasından dolayı Zend gibi IDE’ler henüz bu extension’nın metodlarını desteklememektedir. Yani bu eklentiyi kullanırken dikkatli olmalısınız. Çünkü Zend Studio v.b. IDE’ler kod tamamlama/ hata yakalama desteğini henüz bu extension için vermemektedirler.

Şimdi gelelim manuel kurulumunu nasıl yapacağımıza. Öncelikle http://tinyurl.com/5z3u6s bu adresin sizi yönlendireceği Microsoft Download sayfasından ilgili eklentiyi indiriniz. Daha sonra size dosyaları çıkartması için bir hedef dizin soracaktır. Uygun bir dizine dosyaları çıkarttıktan sonra ilgili dizine giderek içindeki dosyalara bakalım. Bizim için önemli olan içerisinde 2 adet .dll uzantılı dosya vardır. Bunların ikiside benzer isimlerdedir. Birinde sadece _ts.dll diye bir fazlalık vardır. Bu DLL eğer PHP sürümünüz thread safe ise kullanmanız gereken DLL’dir. Diğeri tahmin ettiğiniz gibi PHP’nin non thread safe sürümünü kullanıyorsanız kurmanız gereken eklentidir.Peki, ben bunu nasıl anlayacağım diyorsanız. PHP’nin kurulu olduğu dizine bakınız eğer php5ts.dll dosyasını kullanıyorsanız, PHP kurulumunuz thread safe’dir. Php5.dll ise non-thread safe sürümünü kullanmaktasınızdır.  Biz php_sqlsrv_ts.dll olanını kopyalayarak PHP’mizin kurulu olduğu dizindeki ext isimli klasörün içine atıyoruz. Bu sizde extension isminde de olabilir. Daha sonra php.ini dosyamızı açarak extension’ların tanıtıldığı bölüme extension=php_sqlsrv_ts.dll şeklinde eklentimizi PHP’ye tanıtıyoruz. Son olarak IIS veya Apache server’mıza restart atıyoruz.

Pc’niz de SQL Server 2005 veya SQL Server 2008 kurulu ise artık çalışmalarımıza başlayabiliriz. Biz bu uygulamaları yaparken IIS 7.5 üzerine FastCGI olarak Web Platform Installer yardımı ile kurulumumuzu yaptık ve SQL Server 2008 Enterprise Edition SP1 ‘i kullandık. PHP sürümü olarakta 5.x ve IDE olarakta Zend Studio 6.x kullandık.

İlk önce SQL Management Studio ile SQL Server’mıza bağlanıyoruz. Ardından aşağıdaki gibi bir sql table oluşturuyoruz. Tüm kodlara ve dosyalara yazının sonundaki vereceğim linkten ulaşabilirsiniz.

db_create

Bu table’mızın adı tbl_users olsun. Şimdi sıra geldi PHP tarafından bu table’a sql command göndermeye. Öncelikle en basit anlamda SQL Server 2008 ile nasıl çalışacağınızı anlatacağım daha sonra OOP’e uygun şekilde SQL Server ile çalışacağız.

İlk olarak bağlantımızı sağlayalım. Bunu 2 şekilde yapabiliriz.

  1. Windows Authentication
  2. SQL Server Authentication

Ben her zaman 2. Seçeneğini tercih ediyorum. :) Ama siz 1. Seçenek ile bağlanmak isterseniz Bağlantı kodunuz aşağıdaki şekilde olacaktır. Diğerini örnekte kullanacağımdan burada açıklamıyorum.

Windows Authentication Connection;

$connStr = array(“Database”=>”myMsSQL”);

Sadece veri tabanı adını belirtmemiz yetiyor. Bunun dışında eğer bağlanacağımız SQL Server default’un dışında farklı bir port üzerinden servis’i dinliyorsa bunun için’de server name’i tanımlarken aşağıdaki şekilde tanımlamalıyız.

define(“myServer”,”10.20.30.40, 7541″);

myServer’ı da sqlsrv_connect(); metoduna sqlsrv_connect(myServer); şeklinde verirsek 10.20.30.40 IP’li SQL Server’a 7541 no’lu porttan bir connection request(Bağlantı isteği) gönderecektir.

Hazır bağlantılara değinmişken SQL Server For PHP extension’ı connection pooling’i de desteklemektedir. Yine Connection String’imiz de true(1)/false(0) değerlerini vererek kullanabiliriz.

$connStr = array(“Database”=>”myMsSQL”,

“ConnectionPooling”=>true);

Bu kadar giriş bilgisinden sonra sanırım çalışmalarımıza başlayabiliriz.

İlk önce SQL Server ile nasıl iletişime geçeceğimizi görelim.

"myMsSQL",
				 "UID"=>"sa",
				 "PWD"=>"10");

// SQL connection.
$conn = sqlsrv_connect(Server,$connStr);
!$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : print("Baglanti Saglandi!");

// Close the connection.
sqlsrv_close($conn);
?>

Burada yaptıklarımızı kısaca açıklayacak olursak, ilk önce bağlantı bilgilerimizi tanımladık. Daha sonra sqlsrv_connect(); metodu ile sql server’a bir bağlantı açtık. Hemen alt satırında olası bağlantı problemlerini yakalayabilmek için bir if ile bağlantı durumunu kontrol ettik. Daha sonra da sqlsrv_close(); metodu ile sql server’a açmış olduğumuz bağlantımızı kapattık.

Aynı örnek üzerinden giderek INSERT,SELECT,UPDATE,DELETE işlemlerimizi yapalım.

Öncelikle tablomuzda eğer daha önceden oluşturulmuş kayıtlar var ise aşağıdaki T-SQL kodu ile tablomuzu boşaltıyoruz.

use [myMsSQL]

TRUNCATE TABLE myMsSQL.dbo.tbl_users

Şimdi sıra geldi veri tabanımızda oluşturduğumuz tablomuza yeni bir kayıt eklemeye. Hemen aşağıdaki örneği inceleyerek sql server’a gönderilmek üzere nasıl command oluşturulduğunu görebilirsiniz.

"myMsSQL",
				 "UID"=>"sa",
				 "PWD"=>"10");

// SQL connection.
$conn = sqlsrv_connect(Server,$connStr);
!$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : print("Bağlantı Sağlandı!");

// Execute the sql command query.
$sqlCommand = "INSERT INTO myMsSQL.dbo.tbl_users (username,passwd,testData)
				VALUES ('Hakan DAMAR','2a1b0e','PHP ile SQL Server 2008 Kullanıyoruz.')";
$execQuery = sqlsrv_query($conn,$sqlCommand);
!$execQuery ? print("Hatalı Sorgu!") : print("Sorgu Başarıyla Çalıştırıldı.");

// Close the connection.
sqlsrv_close($conn);
?>

Eğer herşey yolunda gitti ise bu kod ekrana;

insert_db

Yazdırması gerekmektedir.

Not: Eğer IE8 kullanıyorsanız ve SQLDriver4PHP extension’ı ile çalışırken 500 Internal Server Error alıyorsanız. Hatayı görmek için Firefox ile aynı sayfayı çalıştırabilirsiniz. :)

IE dahil tüm tarayıcılar içinde hata raporlamayı açabilirsiniz. Extension bunuda desteklemektedir. PHP.ini ‘den error_reporting ‘i de açmayı unutmayınız.

Şimdi çalıştırdığımız bu sorgunun gerçektende giderek sql server’daki ilgili table yeni bir kayıt ekleyip, eklemediğini aşağıdaki şekilde kontrol edelim.

select_db1

Bu görüntüdende anlaşılacağı üzere PHP ile SQL Server’a başarılı bir şekilde bağlantı sağlayarak, t-sql sorgumuzu çalıştırdık. Üstelik Türkçe karakter problemide olmadan. :)

Not: SQL Management Studio’da yazdığımız tüm kodları çalıştırmak için alt+x tuş kombinasyonunu kullanabiliriz. Sadece tek bir sorgu için ise ilgili sorguyu seçerek alt+x tuş kombinasyonunu kullanabiliriz.

Şimdi bu kaydı değiştirecek UPDATE sorgusunu yazalım ve çalıştıralım. Bir de her seferinde SQL Server’a gidip kod yazmak yerine tablodaki kayıtları sayfanın içine bastıralım.

Veri tabanından dataları alarak ekrana bastıran kodlarını bir önceki insert örneğine göre değiştirerek aşağıdaki şekilde veriyorum. Örnek kodları çalıştırarak inceleyebilirsiniz. Sayfayı her yenilediğinizde(F5) yeni bir kaydın ekrana basıldığını göreceksiniz.

"myMsSQL",
				 "UID"=>"sa",
				 "PWD"=>"10");

// SQL connection.
$conn = sqlsrv_connect(Server,$connStr);
!$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : null;

// Execute the sql command query.
$randPass = rand(1500,358415874);
$newPasswd = sha1($randPass."2a1b0e");
$sqlCommand = "INSERT INTO myMsSQL.dbo.tbl_users (username,passwd,testData)
				VALUES ('Hakan DAMAR','{$newPasswd}','PHP ile SQL Server 2008 Kullanıyoruz.')";
$execQuery = sqlsrv_query($conn,$sqlCommand);
!$execQuery ? print("Hatalı Sorgu!") : null;

// Data Grid
$sqlCommand2 = "SELECT TOP 25 * FROM myMsSQL.dbo.tbl_users";
$executeQuery = sqlsrv_query($conn,$sqlCommand2);
!$executeQuery ? print("SELECT Sorgusu Çalıştırılamadı!") : null;

while($dataRow=sqlsrv_fetch_array($executeQuery)){
	print $dataRow["UID"]." - ".$dataRow["username"]." - ".$dataRow["passwd"]. " - ".$dataRow["testData"]."";
}
// Free result
sqlsrv_free_stmt($executeQuery);

// Close the connection.
sqlsrv_close($conn);
?>

Bu kodları çalıştırarak bir kaç kez abartmadan :) F5 ile sayfamızı yenileyelim. Ekran çıktısı aşağıdaki şekilde olacaktır.

select_db2

Sıra geldi UPDATE sorgusunu yazmaya. Bunun için öncelikle XHTML ile mini bir form hazırlamamız ve burada HTML kontrollerinin value’larına sql server’dan çektiğimiz bilgileri yazdırmalıyız. Daha sonra form post edildiğinde bu dataları alarak ilgili kaydı UPDATE etmeliyiz.

Merak etmeyin hiç zor bir şey değil. Biraz get biraz post ile halledicez. :)

İlk olarak HTML formumumuzu oluşturduk.

Username: Test Data:

Ardından ekrana grid’mizi bastıran kodu düzenleyerek biraz eklenti yaptık.


Bilerek INSERT yapan kodu yorum satırına aldım. Her Düzenle’ye tıkladığınız da bir GET REQUEST(istek)’i olacağından sayfa yenilenecek ve INSERT tekrar, tekrar çalışacaktı. Bunu önlemek için kapattım. AJAX ile yapsaydık bu sorun olmazdı tabi. :) Bir de bu ilk örneğimizde OOP’in yanından bile geçmediğimizden tek sayfada işlerimizi hallediyoruz. Bu yüzden böyle problemler ile karşılaşabiliyoruz. Öncelikle kodun ekran çıktısını görelim. Arındanda kodları inceleyelim.

update_1

Güncelleme işlemi eklenmiş kodumuzun son hali;

"myMsSQL",
				 "UID"=>"sa",
				 "PWD"=>"10");

// SQL connection.
$conn = sqlsrv_connect(Server,$connStr);
!$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : null;
/*
// Execute the sql command query.
$randPass = rand(1500,358415874);
$newPasswd = sha1($randPass."2a1b0e");
$sqlCommand = "INSERT INTO myMsSQL.dbo.tbl_users (username,passwd,testData)
				VALUES ('Hakan DAMAR','{$newPasswd}','PHP ile SQL Server Kullanıyoruz.')";
$execQuery = sqlsrv_query($conn,$sqlCommand);
!$execQuery ? print("Hatalı Sorgu!") : null;
*/
// Data Grid
$sqlCommand2 = "SELECT TOP 250 * FROM myMsSQL.dbo.tbl_users";
$executeQuery = sqlsrv_query($conn,$sqlCommand2);
!$executeQuery ? print("SELECT Sorgusu Çalıştırılamadı!") : null;

while($dataRow=sqlsrv_fetch_array($executeQuery)){
	$userID = $dataRow["UID"];
	print "[Düzenle] ".$userID." - ".$dataRow["username"]." - ".$dataRow["passwd"]. " - ".$dataRow["testData"]."";
}

// Free result for memory :)
//sqlsrv_free_stmt($execQuery);
sqlsrv_free_stmt($executeQuery);

// Update Process
if(isset($_POST["uname"]) && !empty($_POST["uname"]) &&
   isset($_POST["tdata"]) && !empty($_POST["tdata"])){

	$updateID = intval($_GET["updateID"]);
	$username = $_POST["uname"];
	$testData = $_POST["tdata"];

   	/* Parametreleri sqlsrv_query() metodunda vermek istersek.
	$updateCmd = "UPDATE myMsSQL.dbo.tbl_users
   					SET username = ?, testData = ?
   					WHERE UID = $updateID";
   	$sqlParams = array($username,$testData);
   	$execQuery = sqlsrv_query($conn,$updateCmd,$sqlParams);
   	*/

	$updateCmd = "UPDATE tbl_users
			SET username = '$username', testData = '$testData'
			WHERE UID = $updateID";
   	$execQuery = sqlsrv_query($conn,$updateCmd);
   	!$execQuery ? print "UPDATE Sorgusunda Hata Var!" : sqlsrv_free_stmt($execQuery);
   	header("Location:test.php");
   	exit;
}

if(isset($_GET["updateID"]) && !empty($_GET["updateID"])){
	$updateID = intval($_GET["updateID"]);
$sqlCmd = "SELECT username,testData FROM myMsSQL.dbo.tbl_users as                  users   WHERE users.UID = $updateID";
	$execCmd = sqlsrv_query($conn,$sqlCmd);
	!$execCmd ? print("SELECT Sorgusunda Hata Var.") : null;
	while ($row=sqlsrv_fetch_array($execCmd)){
		$username = $row["username"];
		$testData = $row["testData"];
	}
	/*
	$username = sqlsrv_get_field($execCmd,1); // mysql_result(); gibi.
	$testData = sqlsrv_get_field($execCmd,3); // Sorgudaki tek bir alanı döndürür.
    */

?>
Username: Test Data:

Güncelleme işlemini de tamamladıktan sonra sıra geldi silme işlemimizi yapmaya. Silme işlemi için uygulamamızın bir yerinde değişiklik yapacağız ve silme işlemini yapmak için bir karar kontrol mekanizması ekleyeceğiz.

İlk olarak gridimizi ekrana bastıran kodları şöyle değiştirelim.

[Düzenle] | [SİL] ".$userID." - ".$dataRow["username"]." - ".$dataRow["passwd"]. " - ".$dataRow["testData"]."";
}
?>

Ardından silme işlemi için bir karar kontrol mekanizması ekleyelim.


Bu kodu güncelleme işlemi yapan kodun hemen üzerine ekleyeceğiz. Kodumuzun son hali ise şu şekilde olacaktır.

"myMsSQL",
				 "UID"=>"sa",
				 "PWD"=>"10");

// SQL connection.
$conn = sqlsrv_connect(Server,$connStr);
!$conn ? exit("Connection Error: ".print_r(sqlsrv_errors(),true)) : null;

// Data Grid (SELECT)
$sqlCommand2 = "SELECT TOP 250 * FROM myMsSQL.dbo.tbl_users";
$executeQuery = sqlsrv_query($conn,$sqlCommand2);
!$executeQuery ? print("SELECT Sorgusu Çalıştırılamadı!") : null;

// Print Grid
while($dataRow=sqlsrv_fetch_array($executeQuery)){
	$userID = $dataRow["UID"];
	print "[Düzenle] | [SİL] ".$userID." - ".$dataRow["username"]." - ".$dataRow["passwd"]. " - ".$dataRow["testData"]."";
}

// Free result for memory :)
sqlsrv_free_stmt($executeQuery);

// Update Process
if(isset($_POST["uname"]) && !empty($_POST["uname"]) &&
   isset($_POST["tdata"]) && !empty($_POST["tdata"])){

	$updateID = intval($_GET["updateID"]);
	$username = $_POST["uname"];
	$testData = $_POST["tdata"];

	$updateCmd = "UPDATE tbl_users
					SET username = '$username', testData = '$testData'
					WHERE UID = $updateID";
   	$execQuery = sqlsrv_query($conn,$updateCmd);
   	!$execQuery ? print "UPDATE Sorgusunda Hata Var!" : sqlsrv_free_stmt($execQuery);
   	header("Location:test.php");
   	exit;
}

// For DELETE Record.
if(isset($_REQUEST["deleteID"]) && !empty($_REQUEST["deleteID"])){
	$deleteID = intval($_REQUEST["deleteID"]);

	$sqlDeleteCmd = "DELETE FROM tbl_users WHERE tbl_users.UID = {$deleteID}";
	$execSqlCmd = sqlsrv_query($conn,$sqlDeleteCmd);

	!$execSqlCmd ? print("DELETE Sorgusunda Hata Var!") : sqlsrv_free_stmt($execSqlCmd);
	print("Silme İşlemi Başarıyla Gerçekleşmiştir.");
	header("Location:test.php");
	exit;
}

// SELECT record for UPDATE.
if(isset($_GET["updateID"]) && !empty($_GET["updateID"])){
	$updateID = intval($_GET["updateID"]);
	$sqlCmd = "SELECT username,testData FROM myMsSQL.dbo.tbl_users as users WHERE users.UID = $updateID";
	$execCmd = sqlsrv_query($conn,$sqlCmd);
	!$execCmd ? print("SELECT Sorgusunda Hata Var.") : null;
	while ($row=sqlsrv_fetch_array($execCmd)){
		$username = $row["username"];
		$testData = $row["testData"];
	}
?>
Username: Test Data:

Bu kadar bilgiden sonra kendiniz bir form hazırlayarak SQL Server’a yeni bir kayıt eklemeyi deneyiniz. Kolaylık olsun diye INSERT yapan t-sql kodunuda veriyorum. PHP ile tek yapmanız gereken form’dan aldığınız datayı ilgili yerlere eklemek. Bunuda $_REQUEST veya form’un send method’una göre $_GET/$_POST ile yapabilirsiniz.

Veri tabanımıza yeni bir kayıt ekleyen t-sql kodu;

INSERT INTO tbl_users(username,passwd,testData) VALUES(‘$username’,'$passwd’,'$testData’)

Bu koda gelen $username,$passwd,$testData değişkenlerinin değerlerini daha öncede belirttiğim gibi FORM’dan almanız gerekiyor. Aslında kodları incelerseniz daha önce bir INSERT yaptığımızı göreceksiniz. Önceki kodlar size yardımcı olabilir. Tek fark biz VALUE’ları elle verdik, siz FORM’dan dinamik verdireceksiniz. Eğer yeni bir kayıt INSERT ettiremezseniz www.sanalkurs.net adresinden bana ulaşabilirsiniz. Daha fazla bilgi isterseniz, ücretsiz seminerlerimize katılabilirsiniz.

Şimdiye kadar geliştirdiğimiz test.php sayfamıza http://tinyurl.com/kkpotv adresinden ulaşabilirsiniz.

Evet, şimdi sıra OOP ile biraz nefes almaya geldi. Aynı işlemleri OOP’e uygun şekilde yazacağız. Bu makalemde OOP halinide anlatmak istiyordum fakat çok uzun süreceğinden sizleride sıkmak istemiyorum. Bir sonraki yazımda aynı projenin OOP(Object-oriented programming) standartlarına uygun bir şekilde anlatacağım. Ayrı bir makale konusu olacağından daha derinlemesine anlatabilirim.

Hepinize çalışmalarınızda başarılar diliyorum.

Saygılarımla,

-    Hakan DAMAR

 
4 Comments

Posted in MsSQL, PHP

 

SQL Server Driver For PHP Connection Error

10 Jul

SQL Server Driver FOR PHP 5

Merhaba,

Bildiğiniz üzere Microsoft PHP için bir SQL Server Driver’ı çıkarttı. Bu extension’ı PHP’nin üzerine kurduğunuzda SQL Server 05 ve 08 ile sorunsuz ve hızlı bir şekilde işlemler yapabiliyorsunuz.  e-mail’me gelen soru yağmurları arasından seçtiğim bir sorunun cevabını buradan vermek istiyorum. Çünkü SQL Driver henüz yeni bir extension ve Türkçe kaynak hiç yok. Orjinal dökümantasyonu ise pek iç açıcı değil. :)

Hata: (SQL Server 08 üzerinde çalışıyorsanız.)

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -1 [/code]

=> -1 [2] => Invalid option xÁò was passed to sqlsrv_connect. [message] => Invalid option xÁò was passed to sqlsrv_connect. ) )

Çözüm:

SQL Connection string'inizi daha doğrusu array'nizi hazırlarken eğer string türünden hariç bir şifreniz varsa ve string'e convert etmemişseniz bu hatayı olabilirsiniz. Bunun için connection string'inizdeki ilgili alanı ya string'e convert edin yada çift tırnak ( " ) içine alarak otomatik string olarak gösteriniz.

Örnekler;

- Hatalı Örnek:

$connectionStr= array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>15461068071951080841);

- Doğru Örnek:

$connectionStr = array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>(string)15461068071951080841);

veya (Aşağıdaki tavsiyem aynı zamanda. )

$connectionStr = array( "Database"=>"fooDb","UID"=>"sa2","PWD"=>"15461068071951080841");

Böyle basit bir işlemden dolayı sinir katsayınızı arttırabilir. :) Henüz yeni ve ilk versiyonları bunlar. Umarım 2. versiyonunda bunların hepsini halletmiş olurlar.

iyi çalışmalar.

 
No Comments

Posted in MsSQL, PHP

 

For Messenger Application Database

27 Oct

Merhaba,

Bu hafta içinde bir messenger uygulaması için MsSQL ile hazırladığım bir veri tabanın ilk versiyonunu sizlerle paylaşacağım. Son versiyonunu neden paylaşmadığımı sormazsınız heralde :)

USE [N2Soft]
GO
/****** Object:  Table [dbo].[UsersInfo]    Script Date: 10/27/2008 00:10:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[UsersInfo](
[UserID] [int] NOT NULL,
[FirstName] [nvarchar](150) NOT NULL,
[LastName] [nvarchar](90) NOT NULL,
[Picture] [varchar](250) NULL,
[Status] [nchar](10) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Users]    Script Date: 10/27/2008 00:10:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Users](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[Email] [varchar](150) NOT NULL,
[Password] [varchar](32) NOT NULL,
[Nickname] [nvarchar](30) NOT NULL,
[RegDate] [date] NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[BodyList]    Script Date: 10/27/2008 00:10:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[BodyList](
[UserID] [int] NOT NULL,
[SecondUID] [int] NOT NULL,
[AddDate] [date] NOT NULL,
[Permission] [bit] NOT NULL
) ON [PRIMARY]
GO
/****** Object:  View [dbo].[Banned]    Script Date: 10/27/2008 00:10:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create view [dbo].[Banned]
as
select UserID,SecondUID,Permission
from dbo.BodyList
where Permission = 0;
GO
/****** Object:  View [dbo].[Accept]    Script Date: 10/27/2008 00:10:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create view [dbo].[Accept]
as
select UserID,SecondUID,Permission
from dbo.BodyList
where Permission = 1;
GO
/****** Object:  Default [DF_Users_Nickname]    Script Date: 10/27/2008 00:10:01 ******/
ALTER TABLE [dbo].[Users] ADD  CONSTRAINT [DF_Users_Nickname]  DEFAULT (N’Üşengeç’) FOR [Nickname]
GO
/****** Object:  Default [DF_UsersInfo_Status]    Script Date: 10/27/2008 00:10:01 ******/
ALTER TABLE [dbo].[UsersInfo] ADD  CONSTRAINT [DF_UsersInfo_Status]  DEFAULT (N’Offline’) FOR [Status]
GO

Table mantığı ile ilgili sanırım bir çıkmazasa düşmezsiniz. Zaten yapı basit. SP veya ileri seviye farklı bir transaction mekanizması bu versiyonunda olmadığından alıp istediğiniz gibi kullanabilirsiniz. Msn messenger veya Yahoo Messenger’da bu mantıkla tablolama yapmaktadır.

Yinede takıldığınız bir yer olursa biliyorsunuz bana nasıl ulaşacağınızı.

Saygılar,

Hakan DAMAR