none
SQL DB ilişkilendirme RRS feed

  • Soru

  • Merhaba Arkadaşlar,

    SQL DB'de ilişkilendirme konusunda bayağı bir sıkıntı yaşadım ve bunu sizler ile paylaşmak istedim karşılaştığım soruna bir çözüm önerebilirseniz şimdiden minnettar kalırım. Kullandığım sürüm Visual Studio 13 ve SQLDB oluşturduğunuzda Visual Studio 10'da ki gibi Database Diagrams klasörü çıkmıyor. Bu yüzden şekiller üzerinde ilişkilendirme yapamadım ve bende aşağıdaki kod ile ilişkilendirme yaptım. (2 tablom var Table1 ve Table2)

    Table 2'daki ilişkilendirme kodu. 

     FOREIGN KEY ([kullanici_id]) REFERENCES [dbo].[Table1] ([Id])

    Table1 İçeriği

    CREATE TABLE [dbo].[Table1] (
        [Id]           INT           IDENTITY (1, 1) NOT NULL,
        [kullaniciadi] NVARCHAR (50) NULL,
        [sifre]        NVARCHAR (50) NULL,
        [eposta]       NVARCHAR (50) NULL,
        [avatar]       IMAGE         NULL,
        [dogumtarihi]  DATE          NULL,
        PRIMARY KEY CLUSTERED ([Id] ASC),
        UNIQUE NONCLUSTERED ([kullaniciadi] ASC),
        UNIQUE NONCLUSTERED ([eposta] ASC)
    );

    Table2 İçeriği

    CREATE TABLE [dbo].[Table2] (
        [Id]           INT            IDENTITY (1, 1) NOT NULL,
        [kullanici_id] INT            NOT NULL,
        [makale]       NVARCHAR (MAX) NULL,
        PRIMARY KEY CLUSTERED ([Id] ASC),
        FOREIGN KEY ([kullanici_id]) REFERENCES [dbo].[Table1] ([Id])
    );

    Daha sonrasında kullanıcıların bilgilerini girebileceği bir kullanıcı arayüzü tasarladım. Kullanıcı bilgilerini girip rahatlıkla Table1'a kayıt yapabiliyor. Fakat Table2'daki makaleler kısmına kayıt yaptırdığımda aşağıdaki kod ile.

                string b;
                b = SqlDataSource2.ConnectionString;
                SqlConnection baglan = new SqlConnection(b);
                baglan.Open();
                SqlCommand cmnd = new SqlCommand("insert into Table2(makale)values(@makale)", baglan);
                cmnd.Parameters.AddWithValue("@makale", SqlDbType.NVarChar).Value = TextBox5.Text;
                cmnd.ExecuteNonQuery();
                baglan.Close();
                GridView2.DataBind();

    Bu kod çalıştıktan sonra aşağıdaki hatayı alıyorum.
    Additional information: Cannot insert the value NULL into column 'kullanici_id', table 'C:\USERS\User\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\DATABASE_WORKSHOP\DATABASE_WORKSHOP\APP_DATA\DATABASE_WORKSHOP.MDF.dbo.Table2'; column does not allow nulls. INSERT fails.

    Yani demek istiyor ki Table2'daki  kullanici_id kolonu boş olamaz.

    Soru: Zaten Table1'daki Id kolonu ile Table2'daki kullanici_id kolonu birbiri ile ilişkili yani bir değer girilmese bile otomatik olarak Table1'daki Id ile doldurması gerekmiyor mu ? İlişkilendirme mevzusunu biraz irdeler misiniz ?

    İyi Çalışmalar...



    • Düzenleyen Sofwarer 5 Eylül 2015 Cumartesi 22:38
    5 Eylül 2015 Cumartesi 22:33

Tüm Yanıtlar

  • Sizin insert kodunuzda kullanici_id alanını belirtmiyorsunuz ki tabiki bu şekilde hata vericektir. Eğer giriş yapan kullanıcının id değeri direkt eklensin istiyorsanız, giriş yapıldıktan sonra giriş yapan kullanıcının id değerini bir yerde saklayıp insert sorgunuza dahil etmelisiniz. Doğru anlamışımdır inşallah..

    oguzkurtcuoglu.com


    5 Eylül 2015 Cumartesi 23:14
  • Merhaba Oğuz Bey,

    Peki kullanıcı giriş yaptıktan sonra, kullanıcı_id kolonuna kullanıcıya ait id'yi, kullanıcı her makale yazdığında kaydettim diyelim ve makaleleri listelemek için kullandığım datalist1'de, (datalist'e Table2'yi çekmek zorundayım demektir bu) Table1'daki kullanıcı avatar resmini yine datalist1'de bind edebilir miyim ?  

    Teşekkürler...




    • Düzenleyen Sofwarer 6 Eylül 2015 Pazar 13:28
    6 Eylül 2015 Pazar 12:54