Generic Objectlist to Dynamic Insert Query
Merhaba arkadaşlar; Bu yazım’da kodlama yaparken uğraştığım, çözümünü bulduktan sonra da ya ben bunu her yerde kullanırım süper oldu dediğim. Çözümünü ararken eşe dosta danıştığım. Bir yol bir yöntem aradığım, çözüm bulduktan sonra da aslında çok kolaymış dediğim bir konudan bahsedeceğim.
Şöyle düşünün. Web service ile biryerden bir veri çekiyorsunuz. Veri size generic object liste olarak geliyor ama içinde zibilyon tane kolon var.

Bu listenin içindeki 0. index’e girince ne demek istediğimi anlayacaksınız.

Şöyle düşünün bu objenin 0. indexinin altında tam olarak çok fazla alan var.
Bu alanlardan bazıları gerekli ve bazıları da gereksiz, Ama neyin ne kadar gerekli olduğuyla ilgili tam net bir bilginiz yok. Yani bu veri kümesindeki verilerden en gereksiz gördüğünüz veri belki de en gerekli olan.
Neyse çok uzatmayayım. Bu verilerin tamamını bir tablo’ya yazmam gerekiyor. Bu veri setinin içindeki tüm alanlar için bir db tablosu oluşturmak o kadar da zor olmasa gerek. SQL Create scriptini burada nasıl yaptığımı anlatacak değilim. Zaten bu yazıyı okuyorsanız dikkatinizi çekecek olan şey sql create table scriptinin nasıl oluşturulduğu olmasa gerek.
Gelelim konuya, Tam bu obje sırasına göre oluşturulmuş olan bir tablo’ya verileri dinamik olarak atmak için;
Function ObjBelgeEkle(objBelgeler As Object)Dim dbl As New DBLibDim voi As New voilibDim insertq As String = ""Dim kolonadlaristr As String = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBL_PRJ_GOLHARVEST_IRSALIYELER'"Dim kolonlist As List(Of DataRow) = voilib.QueryDondur(kolonadlaristr)Dim kolonlar As String = ""Dim valuesstr As String = ""Dim valtype As String = ""For Each obj In objBelgelerFor Each kl In kolonlistkolonlar = kolonlar & kl(0).ToString & ","Nextkolonlar = kolonlar.Substring(0, kolonlar.Length - 1)For Each kl In kolonlistIf IsNothing(obj.GetType().GetProperty(kl(0).ToString).GetValue(obj)) = False Thenvaltype = obj.GetType().GetProperty(kl(0).ToString).PropertyType.ToStringIf valtype.IndexOf("String") > 0 Or valtype.IndexOf("Date") > 0 Or valtype.IndexOf("Boolean") > 0 ThenIf valtype.IndexOf("Date") > 0 Thenvaluesstr = valuesstr & "'" & voi.tarihYYYYMMDDondurDate(obj.GetType().GetProperty(kl(0).ToString).GetValue(obj).ToString()) & "',"Elsevaluesstr = valuesstr & "'" & obj.GetType().GetProperty(kl(0).ToString).GetValue(obj).ToString() & "',"End IfElseIf (obj.GetType().GetProperty(kl(0).ToString).GetValue(obj).ToString() = "") Thenvaluesstr = valuesstr & "'',"Elsevaluesstr = valuesstr & obj.GetType().GetProperty(kl(0).ToString).GetValue(obj).ToString() & ","End IfEnd IfElsevaluesstr = valuesstr & "NULL,"End IfNextvaluesstr = valuesstr.Substring(0, valuesstr.Length - 1)insertq = "INSERT INTO TBL_PRJ_GOLHARVEST_IRSALIYELER(" & kolonlar.ToString & ") VALUES(" & valuesstr & ")"dbl.QueryCalistir(insertq)insertq = ""kolonlar = ""valuesstr = ""NextEnd FunctionNext