Anasayfa / Yazılım / ASP.NET / SQL Sorguları ve Parametre Kullanımı

SQL Sorguları ve Parametre Kullanımı

Bir önceki makalemde bir veritabanında bir tablo içindeki tüm çalışanların adını listeledik. Peki şöyle bir senaryomuz olsun, kullanıcımız sayfada sadece bir kişiye ait bir veri gelmesini istesin ne yapabiliriz? Mesela şöyle bir şey yapalım. Kullanıcımız kişinin ID numarasını girsin ve bu kişinin ID’si, adı, soyadı, görevi listelensin. Şimdi bunu Northwnd veritabanı üzerinde Employees tablosu için gerçekleştiriyorum.

Default.aspx dosyası :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>





    


    
Kullanıcı ID :

Sayfama bir adet TextBox ekledim kullanıcı buraya bir numara girerek istediği çalışan bilgisini görüntüleyebilecek. Bu bilgiler Label kontrolümde görünecek. Peki bu işlem nasıl gerçekleşek? İşlem kullanıcı butona bastığı anda gerçekleşecek.

Default.aspx.cs dosyası :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnIDOnay_Click(object sender, EventArgs e)
    {
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        conn = new SqlConnection("Server=.;Database=Northwnd;Integrated Security=true");
        comm = new SqlCommand("SELECT EmployeeID,LastName,FirstName,Title FROM Employees WHERE EmployeeID = @EmployeeID", conn);
        int EmployeeID;

        if (!int.TryParse(txtID.Text, out EmployeeID))
        {
            lblKullaniciBilgi.Text = "Lütfen sayısal bir değer giriniz";
        }
        else
        {
            comm.Parameters.Add("@EmployeeID", System.Data.SqlDbType.Int);
            comm.Parameters["@EmployeeID"].Value = EmployeeID;
         try
          {
            conn.Open();
            reader = comm.ExecuteReader();

            if (reader.Read())
            {
                lblKullaniciBilgi.Text = "Employee ID : " + reader["EmployeeID"] + "
" + "Last Name : " + reader["LastName"] + "
" + "FirstName : " + reader["FirstName"] + "
" + "Title : " + reader["Title"] + "
"; } else { lblKullaniciBilgi.Text = "Belirtilen ID kaydı bulunamadı."; } reader.Close(); } catch { lblKullaniciBilgi.Text = "Kullanıcı bilgisi alınırken bir hata alındı" } finally { conn.Close(); } } } }

Koddan da anlaşılacağı üzere işler iyice karmaşıklaşıyor. Şimdi mümkün olduğunca açıklamaya çalışayım. Kullanıcı butona tıkladığında butonun Click eventi tetiklenecek. TextBox kontrolüne girilen değeri alınacak ve bu değerin uygun bir değer olup olmadığı yani integer olup olmadığı kontrol edilecek. Burda bu kontrolü if karar yapısı içinde int.TryParse metodu ile gerçekleştirdim. Yani şu satır :

if (!int.TryParse(txtID.Text, out EmployeeID))

Bu şekilde txtID textbox kontrolüne girdiğim string değer int değerine Parse edilebiliyor mu, edilemiyor mu bunu kontrol ediyorum. Eğer edilebilorsa burada out parametresine gönderiyorum. Out parametresi bir fonksiyondan veri almak için kullanılır. Bu if karar yapısı eğer geçilemezse yani textbox kontrolündeki değer sayısal bir değer değilse kullanıcıya sayısal değer girmesi için uyarı verilecek, eğer sayısal değer girdi ise bu kısım geçilecek ve else bloğu çalışacak.

 SqlConnection conn;
SqlCommand comm;
SqlDataReader reader;
conn = new SqlConnection("Server=.;Database=Northwnd;Integrated Security=true");
comm = new SqlCommand("SELECT EmployeeID,LastName,FirstName,Title FROM Employees WHERE EmployeeID = @EmployeeID", conn);
int EmployeeID;

Bu kısım oldukça açık aslında, bir iki nokta yeni sadece.. Bir Bağlantı nesnesi oluşturuyor ve Connection Stringimi yazıyorum. Sonra bir SqlCommand nesnesi oluşturuyorum ve query yazıyorum. Burada Query’de dikkat edilecek nokta @ parametresi kullandığım kısım. Ben hangi kullanıcıya dair veri alacağımı ID ile öğrenecektim, dolayısı ile WHERE ile filtreleme yaptığım kısımda @EmployeeID ile parametremi belirtiyorum ve bir int değişken tanımlıyorum EmployeeID adında.. Burada sorgumda @EmployeeID kısmım aslında bir nevi placeholder yani bir yer tutucu..

Daha sonra bu yer tutucu için;

comm.Parameters.Add("@EmployeeID", System.Data.SqlDbType.Int);
comm.Parameters["@EmployeeID"].Value = EmployeeID;

Burda comm.Parameters.Add metodu ile oluşturduğum yer tutucu için bir SQL veri tipini tanımlıyorum. Mesela benim veri tipim eğer string olsa idi bu SQL’de System.Data.SqlDbType.NVarChar, 50 gibi bir ifade olacaktı.
Daha sonra oluşturduğum yer tutucu neye eşitlenecek bunu belirtiyorum, benim örneğimde EmployeeID’ye eşitleniyor.

Bu örneğin sonucunda kullanıcı uygun ID değerini girdiğinde veri listelenir. Unutmadan tekrar belirteyim çalıştığımız database Northwnd veri tabanı..

2 yorum

  1. if (checkBox1.Checked == true && checkBox2.Checked == true)
    {

    string sorgu = @”select sevkedenhastane,sevkedilenhastane from sevkıslem where sevkedenhastane=@sevkedenhastane and sevkedilenhastane=@sevkedilenhastane”;
    SqlCommand rapor = new SqlCommand(sorgu, baglantirapor);
    rapor.Parameters.AddWithValue(“@sevkedenhastane”, comboBox1.Text);
    rapor.Parameters.AddWithValue(“@sevkedilenhastane”, comboBox2.Text);

    SqlDataAdapter adbrapor = new SqlDataAdapter(rapor);
    DataTable dtrapor = new DataTable();
    adbrapor.Fill(dtrapor);
    dataGridView1.DataSource = dtrapor;
    }

    sadece combobox1 deki veriye göre datagrid oluşuyor. hem combo1 hemde combo2 nin ortak değerini nasıl alabilrim

  2. ‘——————————————————–

    <%
    '// Nesneler açılıyor
    Set proje = Server.Createobject("Adodb.Recordset")

    '——————————————————–

    konu_id_1=Request("konu_id_1")
    konu_id_2=Request("konu_id_2")
    konu_id_3=Request("konu_id_3")

    '——————————————————–

    Yararlanici_id_1=Request("Yararlanici_id_1")
    Yararlanici_id_2=Request("Yararlanici_id_2")
    Yararlanici_id_3=Request("Yararlanici_id_3")

    '——————————————————–

    Tur_id=Request("Tur_id")

    '——————————————————–

    query = "select * from proje where Koordinat ‘””‘ ”

    ‘——————————————————–

    if konu_id_1″” then
    query = query & ” AND Konu = ‘”&konu_id_1&”‘”
    end if

    if konu_id_2″” then
    query = query & ” AND Konu = ‘”&konu_id_2&”‘”
    end if

    if konu_id_3″” then
    query = query & ” AND Konu = ‘”&konu_id_3&”‘”
    end if

    ‘——————————————————–

    if Yararlanici_id_1″” then
    query = query & ” AND Yararlanici = ‘”&Yararlanici_id_1&”‘”
    end if

    if Yararlanici_id_2″” then
    query = query & ” AND Yararlanici = ‘”&Yararlanici_id_2&”‘”
    end if

    if Yararlanici_id_3″” then
    query = query & ” AND Yararlanici = ‘”&Yararlanici_id_3&”‘”
    end if

    ‘——————————————————–

    if Tur_id”” then
    query = query & ” AND Tur = ‘”&Tur_id&”‘”
    end if

    ‘——————————————————–

    query = query & ” order by id desc”

    proje.open query,baglan,1

    Toplam = proje.RecordCount ‘ Tablodaki kayıt sayısı
    %>

    ‘——————————————————–

    KONU 1   /   KONU 2   /   KONU 3

    YARARLANICI 1   /   YARARLANICI 2   /   YARARLANICI 3

    TAMAMLANAN   /   PLANLANAN   /   DEVAM EDEN

    ‘——————————————————–

    PROJE TABLOSUNUN İÇERİSİNDE: Koordinat – Konu – Yararlanici – Tur İSİMLERİNDE 4 ADET ALAN VAR

    ŞU ANDA HER SATIRDAN SADECE BİR ŞIK SEÇECEK ŞEKİLDE SORGULAMA İŞLEMİNİ SORUNSUZ YAPIYOR

    KONU 1 – YARARLANICI 3 – PLANLANAN >>> SORGUSUNU SORUNSUZ LİSTELİYOR

    ‘——————————————————–

    FAKAT… KONU VE YARARLANICI ALANLARI ÇOKTAN SEÇMELİ ALAN OLDUĞU İÇİN

    KONU 1 / KONU 3 (iki alan seçilince) – YARARLANICI 2 / YARARLANICI 3 (iki alan seçilince) – PLANLANAN >>> SORGUSUNU LİSTELEYEMİYOR

    SORUN AND LERDE YERİNE OR KULLANARAK KISMEN ÇÖZÜYORUM AMA ORDADA FARKLI HATALAR ÇIKIYOR.

    ‘——————————————————–

    YARDIM RİCA EDİYORUM

    SELAM VE SAYGILAR

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir