Öncelikle yeni yılınız kutluolsun. Şimdi ben c# ı tam olarak bilmediğim için yazdığınız kodu çok anlayamadım. Ben tam olarak size tasarımımı anlatayım. Elimizde 3 tablo var. Bunlar DOCUMENT, L_O_C_ATION , SUBMISSIONAL. DOCUMENT tablosundaki primary key'i DOC_ID. Bu DOC_ID aynı zamanda L_O_C_ATION ve SUBMISSIONAL tablolarının primary key'i ve foreign key'i. Bu tabloların elemanlarıda aşağıdaki gibi; DOCUMENT=doc_id, CLASS_OF_DOC, TYPE_OF_DOC, D. TITLE_OF_DOC, D. DOC_DATE, AUTHOR, DOC_NUMBER, REPLIED_DOC_NUMBER LOCAT_I_O_N=doc_id, FILE_NO, ROOM_NO, SHELF_NO, BORROWER SUBMISSIONAL=doc_id, ARRIVAL_DATE, SUBMITTED_BY, SUBMITTED_T O, SUBMITTER_BRANCH, SUBMITTED_BRANCH Şimdi tam olarak istediğim şeyi bir örnekle anlatıcak olursam; DOCUMENT tablomuzun aşağıdaki gibi olduğunu varsayalım, yani bu verileri içerdiğini düşünelim. DOC_IDDOC_NUMBERREPLIED_DOC_NUMBER 101ANULL 205A1A 123A5A 404A3A 21NULLNULL 42NULLNULL şimdi bu veriye baktığımızda sırasıyla DOC_ID si 10,20,12,40 olan dosyaların birbirine bağlı olduğunu görüyoruz. Bunların birbirine bağlı olduklarını DOC_NUMBER, REPLIED_DOC_NUMBER ilişkisine bakarak anlıyabiliriz. Diger dosyaların "REPLIED_DOC_NUMBER"ı cevaplanan dosyanın "DOC_NUMBER"ına eşit olucak. Mesela DOC_ID'si 10 olan dosyanın cevabı DOC_ID'si 20 olan dosyadır. Çünkü 10'un DOC_NUMBER'ı 20'in REPLIED_DOC_NUMBER'ına eşitdir. Bu eşitlik 10 ile 20 yi birbirine bağlar. 20'in DOC_NUMBER ı ise DOC_ID si 12 olan dosyanın REPLIED_DOC_NUMBER'ına eşittir. bunun sonucunda 20 ile 12 birbirine bağlanır. Daha öncedende 10 ile 20 birbirine bağlanmıştı. şimdiki sıramız 10-20-12 şeklinde oldu. aynı işlemin ardındanda sıramız 10-20-12-40 şeklini alıyor. Ve ekrana yansıtıyor. Bu verilerle bağlantısı olan SUBMISSIONAL ve LOCAT_I_O_N tablolarındaki değerlerde ekrana yansıyor. Yukarıdaki SP bu işi yapıyor ama verileri parça parça gönderiyor buda bizim asıl sorunumuz. Bunları ya sql de birleştirmemiz yada c#da birleştirerek ekrana yazdırmamız gerekiyor. Sizin yukarıda yazdığınız kod bu işi yapabiliyormu?eğer yapa biliyorsa beni büyük bir derten kurtarmış olursunuz.

UNION yada INNERJOIN işini görür.

C# kısmında çok daha rahat bir şekilde halledilebilir. T-SQL ' e göre daha esnek bir yapı. Tablolarınızı ve bu tablolardan hangi verileri hangi koşul ile almak istiyorsanız yazarsanız. C# kodunu yazabilirim.

union galiba işe yaramıyor. select komutları arka arkaya olmadıkları için sanırım. join işlemini nasıl yapabilirim. burda komutlar while içinde sürekli dönüyor. Fikir için faydası olurmu bilmem ama yukarıdaki SP document mag. sys. deki zincir yöntemi. Birbiriyle bağlantılı dosyaları sıralıyor. Yani iki kişi arasındaki postaların sıralanması gibi.

açıkcası server side konusunda tambir bilgimyok. Arayüz olark c# kullanıyoruz. sorunu burdan halledebilirmiyiz. "while içinde dönebilir" dediğiniz kısmı anlayamadım. where içinde ayrıca birde while mı kullanıcaz yada böyle bişey mümkünmü? Bu sorgular sonucunda tam olarak ekranda görmek istediğim şeye örnek vericek olursam bunun gibi bişey; DOC_IDDOC_NUMBERREPLIED_DOC_NUMBER 101ANULL 205A1A 123A5A 404A3A bu 4 dosya birbirine bu şekilde bağlı -

Valla test etme işi sana kalmış. Ben yardımcı olmaya çalıştım. DB senin elinde kayıtlarda senin elinde C# projesi açıp bir buton ve label ekleyip dene.

Bu tür işlemleri server side kodlama tarafında daha rahat yapabilirsin. Innerjoin örneği : Select from table_x where id in parantez içindeki sorgu while içinde dönebilir. ilk sql sorgusu while'ı kapsayacak. bana sorarsan pl/sql taraflı değişde serve side kod yazmak daha iş görür her şekilde manupile edebilirsin. SP taraflı yarın detaylı bir göz atarım koda. İyi geceler.

Dostum 3 tablo var ama 1 tablo üzerindeki verileri istemişsin. Aynı tablo üzerindeki değerleri kontrol ediyorsun. Kodu hiç derlemeden syntax hatası olabilir. Kod: using(SqlConnection connection = new SqlConnection { string query ="select DOC_ID, DOC_NUMBER, REPLIED_DOC_NUMBER From DOCUMENT"; SqlCommand command = new SqlCommand ; using (SqlDataReader reader = command. ExecuteReader { int counter=0; while (reader. Read { counter=counter+1; if(counter>1){ string query2 ="select DOC_ID, DOC_NUMBER, REPLIED_DOC_NUMBER From DOCUMENT"; SqlCommand command2 = new SqlCommand(query2, connection); using (SqlDataReader reader2 = command2. ExecuteReader } if(counter 1) } reader. Close ; } connection. Close ; } Ben soruyu şu şekilde algılamıştım. Bir DOC_ID var bu DOC_ID'nin bir L_O_CATION' da tutuluyor ve bu LOKASYONDAN dosyaları birileri alıp veriyor bu değerlerde SUBMISSIONAL tablonda tutuyorsun. Bunun için kod aşağıda, Üç tabloyu innerjoin ile birleştirecez Kod: using(SqlConnection connection = new SqlConnection { string query ="select DOC. DOC_ID AS DOC_ID, DOC. DOC_NUMBER AS DOC_NUMBER, DOC. REPLIED_DOC_NUMBER AS REPLIED, LOC. LOC_ID AS LOC_ID, SUB. SUB_ID AS SUB_ID FROM DOCUMENT DOC inner join L_O_C_ATION LOC on LOC. DOC_ID = DOC. DOC_ID inner join SUBMISSIONAL SUB on SUB. LOC_ID = LOC. LOC_ID; SqlCommand command = new SqlCommand ; using (SqlDataReader reader = command. ExecuteReader { while (reader. Read reader. Close ; } connection. Close ; }

Kod: ALTER PROC . @ID INT AS DECLARE @D_NUM VARCHAR(20) SET @D_NUM=NULL DECLARE @DONGU INT SET @DONGU=0 BEGIN IF OR SELECT 'ID NULL' ELSE BEGIN IF EXISTS(SELECT FROM DOCUMENT WHERE REPLIED_DOC_NUMBER= BEGIN SELECT D. CLASS_OF_DOC, D. TYPE_OF_DOC, D. TITLE_OF_DOC, D. DOC_DATE, D. AUTHOR, D. DOC_NUMBER, D. REPLIED_DOC_NUMBER, L. FILE_NO, L. ROOM_NO, L. SHELF_NO, L. BORROWER, S. ARRIVAL_DATE, S. SUBMITTED_BY, S. SUBMITTED_TO, S. SUBMITTER_BRANCH, S. SUBMITTED_BRANCH FROM DOCUMENT D, SUBMISSIONAL S, L WHERE D. DOC_ID=@ID AND D. DOC_ID=S. DOC_ID AND S. DOC_ID=L. DOC_ID SET @D_NUM= WHILE (@DONGU=0) BEGIN SELECT D. CLASS_OF_DOC, D. TYPE_OF_DOC, D. TITLE_OF_DOC, D. DOC_DATE, D. AUTHOR, D. DOC_NUMBER, D. REPLIED_DOC_NUMBER, L. FILE_NO, L. ROOM_NO, L. SHELF_NO, L. BORROWER, S. ARRIVAL_DATE, S. SUBMITTED_BY, S. SUBMITTED_TO, S. SUBMITTER_BRANCH, S. SUBMITTED_BRANCH FROM DOCUMENT D, SUBMISSIONAL S, L WHERE REPLIED_DOC_NUMBER=@D_NUM AND D. DOC_ID=L. DOC_ID AND L. DOC_ID=S. DOC_ID SET @D_NUM= IF NOT EXISTS BREAK END END ELSE SELECT 'BU DOSYANIN ZINCIRI YOK' END END Arkadaşlar hoca derste proje olarak bize Documet Mang. projesi verdi. Ben projenin SQL kısmıdan sorumluyum. Database in büyük bir çoğunluğunu hallettim ama yukardaki SP de takıldım. SP aslında düzgün çalışıyor ama while ın içindeki select komutu yüzünden ekrandaki tablolar ayrı ayrı görünüyor. Bu tabloları birleştirmek için bana önerebileceğiniz bir yöntem varmı?

TABLES=DOCUMENT, L_O_C_ATION, SUBMISSIONAL DOCUMENT=CLASS_OF_DOC, TYPE_OF_DOC, D. TITLE_OF_DOC, D. DOC_DATE, AUTHOR, DOC_NUMBER, REPLIED_DOC_NUMBER LOCAT_I_O_N=FILE_NO, ROOM_NO, SHELF_NO, BORROWER SUBMISSIONAL=ARRIVAL_DATE, SUBMITTED_BY, SUBMITTED_TO, SUBMITTER_BRANCH, SUBMITTED_BRANCH YUKARIDA VERDİĞİM DEĞERLERİ CEKİP EKRANDA GÖRMEM GEREKİYOR. DOC_IDDOC_NUMBERREPLIED_DOC_NUMBER 101ANULL 205A1A 123A5A 404A3A MESELA BİZE "DOC_NUMBER"I "1A" OLAN BİDEĞER GİRİLDİ. BİZ BU "DOC_NUMBER"A SAHİP DOSYAYI VE BU DOSYANIN CEVABINI GÖSTERİYORUZ. BİR DOSYANIN CEVABI OLDUĞUNU NASIL ANLIYORUZ? DIGER DOSYALARIN "REPLIED_DOC_NUMBER"I CEVAPLANAN DOSYANIN "DOC_NUMBER"INA EŞİT OLUCAK. BU ŞEKİLDE BİR DÖNGÜ OLUŞMASI GEREKİYOR. . Normalde bunu bu şekilde sp yaptım ama c# dataGridView e gönderemiyoruz. sanırım sp de birden fazla sonuc döndüğü için ekranda görünmüyor. C# da bunu birleştirmenin bir yolu varmı yada bu şekilde görüntülenebilirmi? YARDIMLARINIZ İÇİN ÇOK TEŞEKKÜREDERİM İYİ GECELER -