C# Asp.net Hatası Incorrect syntax near '='. (Select * from...) Id almıyor nerede hata yapıyorum?

taner (1) 10 yıl önce sordu

Incorrect syntax near '='. (Select * from Kontratlar Where KontratId=)

hatasını alıyorum

Problemimi biliyorum. Id almıyor ama bir türlü sorunu çözemedim

Kontratdetay.aspx?KontratId=4 şeklinde otomatik sorunsuz Id yide problemsiz gönderiyorum sayfaya

DataRow dr = system.GetDataRow("Select * from Kontratlar Where KontratId=" + KontratId);

DataRow dr = system.GetDataRow("Select * from Kontratlar Where KontratId=4"); şeklinde kendim save lersem açıyor ama otomatik idi alamıyorum. Id yide problemsiz gönderiyorum sayfaya

Kodlarım aşağıdadır.

 

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

public partial class Admin_Kontratdetay : System.Web.UI.Page
{
    SiteAyar system = new SiteAyar();
    public string KontratId = "";


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!isPostBack)
        {



            DataRow dr = system.GetDataRow("Select * from Kontratlar Where KontratId=" + KontratId);
            if (dr != null)
            {
                trlDairesi.Text = dr["Dairesi"].ToString();
                trlMahallesi.Text = dr["Mahallesi"].ToString();
                trlSokagi.Text = dr["Sokagi"].ToString();
                trlCinsi.Text = dr["Cinsi"].ToString();
                ltrlKirayaVerenAdiSoyadi.Text = dr["KirayaVerenAdiSoyadi"].ToString();
                ltrlKirayaVerenTc.Text = dr["KirayaVerenTc"].ToString();
                ltrlKirayaVerenIkamet.Text = dr["KirayaVerenIkamet"].ToString();
                ltrlKiraciAdiSoyadi.Text = dr["KiraciAdiSoyadi"].ToString();
                ltrlKiraciIkametgah.Text = dr["KiraciIkametgah"].ToString();
                ltrlKiraciİsAdres.Text = dr["KiraciİsAdres"].ToString();
                ltrlBirAylikKiraRakam.Text = dr["BirAylikKiraRakam"].ToString();
                ltrlBirAylikKiraYazi.Text = dr["BirAylikKiraYazi"].ToString();
                ltrlBirsenelikKiraRakam.Text = dr["BirsenelikKiraRakam"].ToString();
                ltrlBirsenelikKiraYazi.Text = dr["BirsenelikKiraYazi"].ToString();
                ltrlOdemeSekli.Text = dr["OdemeSekli"].ToString();
                ltrlKiraMuddeti.Text = dr["KiraMuddeti"].ToString();
                ltrlaslangictarihi.Text = dr["Baslangictarihi"].ToString();
                ltrlSimdikiDurumu.Text = dr["SimdikiDurumu"].ToString();
                ltrlNeİcinKullanacagi.Text = dr["NeİcinKullanacagi"].ToString();
                ltrlyilinkirasi.Text = dr["tarihindenitibaren"].ToString();
                ltrloraninda.Text = dr["oraninda"].ToString();
                ltrlyilkirasiayliknet.Text = dr["yilkirasiayliknet"].ToString();
                ltrlodenecektir.Text = dr["odenecektir"].ToString();
                ltrlnakit.Text = dr["nakit"].ToString();
                ltrlkarsiligi.Text = dr["karsiligi"].ToString();
                ltrlgunu.Text = dr["gunu"].ToString();
                ltrlbankasi.Text = dr["bankasi"].ToString();
                ltrlsubesi.Text = dr["subesi"].ToString();
                ltrlnoluhesabina.Text = dr["noluhesabina"].ToString();
                ltrladinayatirilacaktir.Text = dr["adinayatirilacaktir"].ToString();
                ltrlmahkemeleri.Text = dr["mahkemeleri"].ToString();
                ltrlKiraciAdiSoyadi0.Text = dr["KiraciAdiSoyadi"].ToString();
                ltrlKirayaVerenAdiSoyadi0.Text = dr["KirayaVerenAdiSoyadi"].ToString();



               


            }
            else
                Response.Redirect("Kontratlar.aspx");
        }
    }

   

    public bool isPostBack { get; set; }
}
 

 

murat 10 yıl önce

system nesnesi nedir? Ergin Bey'in yazdığı yöntemi kullanabilirsiniz. Güvenlidir. Int türü haricinde veri kabul etmez.

Toplam 4 cevap


ergin (2539) 10 yıl önce cevapladı

Page Load Evetntinde adres satırındaki  KontratId parametresimi Request ile almayı unutmuşsunuz.

protected void Page_Load(object sender, EventArgs e)
        {
            int KontratId=0;
            Int32.TryParse(Request.QueryString["KontratId"], out KontratId);
        }

Şeklinde parametre ile gelen değeri alabilirsiniz. 

Fakat kullanıcıdan gelecek değerlere güvenmemek lazım ve string birleştirme yapmak yerine  Sqlparameter kullanmanızı öneririm. 

Aksi takdirde yazdığınız kodlar SQL Injection'a açık hale gelecektir ki bu da sitenizn hack edilmesine sebebiyet verir.

Yukarıdaki kod  Querystring üzerinden gelen KontratId değerimi alacak Int değere çevirmeyi deneyecektir. Nispeten kullanıcı parametre değerimi eli ile değiştirir veya int yerine string girerse kodunuz hataya düşmeyecektir.
    

murat (12547) 10 yıl önce cevapladı

 KontratId değeri NULL geliyor  çünkü Page Load olayında  adres satırı üzerinden gelen veriyi almamışsınız. 

Request["KontratId"]

ile önce değeri almalı sonra SQL sorgunuzu oluşturmalısınız.

taner (1) 10 yıl önce cevapladı

teşekkürler

           DataRow dr = system.GetDataRow("Select * from Kontratlar Where KontratId=" + Request["KontratId"]);

şeklinde işimi hallettim

hakan (15475) 10 yıl önce cevapladı
protected void Page_Load(object sender, EventArgs e)
        {
            int KontratId=0;
            Int32.TryParse(Request.QueryString["KontratId"], out KontratId);
DataRow dr = system.GetDataRow("Select * from Kontratlar Where KontratId=" + KontratId.ToString());
        }

Daha doğru olacaktır. Hiç bir zaman kullanıcıdan gelen verileri sorgunuzun içerisine doğrudan yerleştirmeyin.