Window formda veritabanında birbirine bağımlı iki tabloyu aynı Anda kaydettirme

memoli63

Asistan
Katılım
14 Kasım 2008
Mesajlar
127
Reaksiyon puanı
0
Puanları
0
Bu şekilde iki tablom var Arayüz ekranını da aşağıdaki gibi tasarladım. Fakat nasıl yapacağımı bilmiyorum . Kaydet tuşuna basıldığı zaman başta parsel tablosuna kayıt yapmalı ve O Id getirip benim tarla tablosunda bulunan parselId kaydettirmem lazım ...

create table tbParsel
(
Id int identity(1,1) primary key not null,
Ada int not null,
ParselNo int not null,
ParselAlani decimal
)
go
create table tbTarla
(
Id int identity(1,1) primary key not null,
TcKimlik nvarchar(11)not null,
ParselId int not null,
ToplamAlan decimal not null,
Il nvarchar(30)not null,
Ilce nvarchar(30)not null,
Koy nvarchar(30) not null

Constraint FK_Tarla_Kisi foreign key(TcKimlik)references tbKisi(Tc) on update cascade,
Constraint FK_Tarla_Parsel foreign key(ParselId) references tbParsel(Id) on update cascade
)

ArsaGirisFormu-2884-21276.png
 

memoli63

Asistan
Katılım
14 Kasım 2008
Mesajlar
127
Reaksiyon puanı
0
Puanları
0
Kimse cevap vermediği için anlatamadığı düşünerek tekrar ifade etmek istiyorum
Sql tarafında ilişkili 2 tablom var Tarla ve Parsel C# windows tarafında resimde görüldüğü üzere 2 tabloya gidecek veriler aynı form üzerinde fakat "kaydet" tuşuna basıldığından ilk önce Parsel tablosun kaydedilmesi lazım çünkü ordan gelecek "ParselID " Tarla tablosuna ekleyecez .....
hnpmmhbn.png
 

ergunfb

Öğrenci
Katılım
24 Ekim 2014
Mesajlar
6
Reaksiyon puanı
0
Puanları
0
kaydet butonunun altına sql connection ekleyip, connection open dan sonra parselId ne insert edeceksin ?? yanlış mı anlıyorum ki? cevabını zaten kendin vermişsin :)
 

Champion78

Müdavim
Müdavim
Katılım
29 Eylül 2006
Mesajlar
1,716
Reaksiyon puanı
43
Puanları
228
ado.net mi kullanıyorsun entity framework mü?
 

falcon291

Profesör
Katılım
6 Eylül 2012
Mesajlar
1,360
Reaksiyon puanı
45
Puanları
228
Tabloyu oluşturmuşsun tamam. Ama tabloya kayıt eklemek için INSERT INTO SQL komutunu kullanacaksın.
İlk INSERT'den sonra oluşan ID'yi alıp diğer tablolarda da INSERT yapman gerekecek.
Soru daha çok SQL sorusu gibi.
 

memoli63

Asistan
Katılım
14 Kasım 2008
Mesajlar
127
Reaksiyon puanı
0
Puanları
0
doğru anlamışsın üstatım da fakat yapmadım kodu yazıyorum syntax hatası verip durdu. aşağıda kodu paylaşıyorum

- - - Mesaj Güncellendi - - -

Adonet kullanıyorum. Syntax hatası alıyorum "Incorrect syntax near '30'." Burdaki 30 değeri Parsel Id .

try
{

SqlConnection con = new SqlConnection("Server=.; database= CiftciDesteklemesi; Integrated Security=SSPI");
con.Open();
SqlCommand cmd = new SqlCommand("Insert Into tbParsel(Ada,PNo,PAlani) Values(@Ada,@PNo [MENTION=9825]pala[/MENTION]ni); Select SCOPE_IDENTITY() AS PId", con);

cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddWithValue("@Ada", Convert.ToInt32(txtAdaNo.Text));
cmd.Parameters.AddWithValue("@PNo", Convert.ToInt32(txtParselNo.Text));
cmd.Parameters.AddWithValue( [MENTION=9825]pala[/MENTION]ni", Convert.ToDecimal(txtParselAlani.Text));
SqlParameter insertprm = new SqlParameter();
insertprm.Direction = ParameterDirection.Output;
insertprm.ParameterName = "PId";
insertprm.Size = 10;
cmd.Parameters.Add(insertprm);


string sonId = cmd.ExecuteScalar().ToString();



if (con.State == ConnectionState.Closed)
con.Open();

SqlCommand cmd2 = new SqlCommand("insert into (IlId,IlceId,Koy,TcKimlik,ParselId)",con);
cmd2.CommandType = System.Data.CommandType.Text;
cmd2.CommandText = " Insert Into tbTarla(IlId,IlceId,Koy,TcKimlik, Cinsi,ParselId) Values(@IlId,@IlceId,@Koy,@TcKimlik [MENTION=57006]cins[/MENTION]i, '" + sonId + "' ";
cmd2.Parameters.AddWithValue("@IlId", Convert.ToInt32(cmbIl.SelectedValue));
cmd2.Parameters.AddWithValue("@IlceId", Convert.ToInt32(cmbIlce.SelectedValue));
cmd2.Parameters.AddWithValue("@Koy", txtKoy.Text);
cmd2.Parameters.AddWithValue("@TcKimlik", txtTc.Text);
cmd2.Parameters.AddWithValue( [MENTION=57006]cins[/MENTION]i", txtCinsi.Text);


int etkilenenSatirSayisi = cmd2.ExecuteNonQuery();



if (etkilenenSatirSayisi > 0)
{
MessageBox.Show("Kayıt Başarı ile Tamamlandı");
}
else
{
MessageBox.Show("Hata oluştu!!!");

}
con.Close();
cmd.Dispose();
cmd2.Dispose();


}
catch (Exception)
{

throw;
}
 

Champion78

Müdavim
Müdavim
Katılım
29 Eylül 2006
Mesajlar
1,716
Reaksiyon puanı
43
Puanları
228
hata aldığı yerdeki tek tırnakları kaldırıp bi dene ayrıca parantez ve virgül eksik :) parselid kolonun integer'dır herhalde, sen tek tırnak içinde string olarak göndermeye çalışıyorsun gibi görünüyor.

var olan:
@TcKimlik [MENTION=57006]cins[/MENTION]i, '" + sonId + "' ";
olması gereken:
@TcKimlik, [MENTION=57006]cins[/MENTION]i, " + sonId + ")";
 

memoli63

Asistan
Katılım
14 Kasım 2008
Mesajlar
127
Reaksiyon puanı
0
Puanları
0
ParselId convert ettimde hata ondan değil Tırnaksız deniyorum + parantez :)
 

Champion78

Müdavim
Müdavim
Katılım
29 Eylül 2006
Mesajlar
1,716
Reaksiyon puanı
43
Puanları
228
programı debug edip commandText değişkinindeki sorguyu alıp direkt olarak sql üzerinde çalıştırmayı deneyebilir misin?
 

memoli63

Asistan
Katılım
14 Kasım 2008
Mesajlar
127
Reaksiyon puanı
0
Puanları
0
hata aldığı yerdeki tek tırnakları kaldırıp bi dene ayrıca parantez ve virgül eksik :) parselid kolonun integer'dır herhalde, sen tek tırnak içinde string olarak göndermeye çalışıyorsun gibi görünüyor.

var olan:
@TcKimlik @cinsi, '" + sonId + "' ";
olması gereken:
@TcKimlik, @cinsi, " + sonId + ")";

Parantezi kapatınca sorun çözüldü . Yorum yapan tüm arkadaşlara teşekkür ederim.
 
Üst