En iyi yanıtlayıcılar
Stored Procedure`den Tablo olarak veri alma

Soru
-
Arkadaşlar merhaba
benim aşağıdaki gibi bir stored procedurem var.
ALTER PROCEDURE ProcTeminIstatistik @TeminKodu as NVARCHAR(8) AS BEGIN SET NOCOUNT ON Declare @FirmalarCount as int Declare @FirmaKod as int Declare @cols as NVARCHAR(MAX) Declare @query As NVARCHAR(MAX) Set @FirmaKod=0 Select @FirmalarCount=Count(Distinct FirmaKodu) From Teklifler Where TeminKodu= @TeminKodu Select @cols = STUFF((SELECT distinct ',' + QUOTENAME(FirmaKodu) FROM Teklifler Where TeminKodu=@TeminKodu FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') , 1, 1, '') SET @query ='Select T.TasinirAdi,' WHILE @FirmalarCount>0 BEGIN IF @FirmalarCount=1 BEGIN SET @query = @query+ 'Sum(ISNULL(CASE WHEN T.FirmaKodu = ' + Char(39) + SUBSTRING(@cols,@FirmaKod+2,8) + Char(39) + ' THEN T.YaklasikAlinanFiyat END,0)) AS '+ SUBSTRING(@cols,@FirmaKod+2,8) + 'YMAlinanFiyat,Sum(ISNULL(CASE WHEN T.FirmaKodu = ' + Char(39) + SUBSTRING(@cols,@FirmaKod+2,8) + Char(39) + ' THEN T.TeminBirimFiyat END,0)) AS '+ SUBSTRING(@cols,@FirmaKod+2,8) + 'YMTeminFiyat' End IF NOT @FirmalarCount=1 Begin SET @query = @query+ 'Sum(ISNULL(CASE WHEN T.FirmaKodu = ' + Char(39) + SUBSTRING(@cols,@FirmaKod+2,8) + Char(39) + ' THEN T.YaklasikAlinanFiyat END,0)) AS '+ SUBSTRING(@cols,@FirmaKod+2,8) + 'YMAlinanFiyat,Sum(ISNULL(CASE WHEN T.FirmaKodu = ' + Char(39) + SUBSTRING(@cols,@FirmaKod+2,8) + Char(39) + ' THEN T.TeminBirimFiyat END,0)) AS '+ SUBSTRING(@cols,@FirmaKod+2,8) + 'YMTeminFiyat' + ',' End SET @FirmalarCount = @FirmalarCount-1 Set @FirmaKod=@FirmaKod+11 END Set @query= @query + ' from Teklifler T Where TeminKodu= ' + Char(39) +@TeminKodu + Char(39) +' Group by T.TasinirAdi' Exec sp_executesql @query, N'@TeminKodu nvarchar(8)', @TeminKodu = @TeminKodu END
Bu procedureyi sql tarafından sorgulattığımda tablo olarak çıktı alıyorum ancak vb.net tarafından almaya çalıştığımda boş dönüyor.Bu sorunun nedeni ne olabilir yardımcı olabilirseniz sevinirim.
Yanıtlar
-
Hayır direk Sql'de aldığınız sonucu getirir size. DataAdapter kullanmanız faydalı olur.
Internette VB.Net için stored procedure kullanımına örnek olarak şunu buldum. Aşağıdaki örneği inceleyerek kendinize göre düzenleyip denermisiniz ?
Dim CN As New SqlConnection("Integrated Security=SSPI;Initial Catalog=Okul;Data Source=.\SQLEXPRESS") CN.Open() Dim CMD As SqlCommand = New SqlCommand("S_OgrenciKayit", CN) 'SqlCommand nesnesi varsayilan olarak CommandtType.Text olarak gelir; bunu CommandType.StoredProcedure olarak degistiriyoruz: CMD.CommandType = CommandType.StoredProcedure 'DataAdapter vasitasiyla DataTable'yi dolduruyoruz ve Grid'e bagliyoruz: Dim DA As SqlDataAdapter = New SqlDataAdapter(CMD) Dim DT As DataTable = New DataTable DA.Fill(DT) DataGridView1.DataSource = DT CN.Close()
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft urunleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ucretsiz sunmaktadır. Bu icerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk ustlenildiği anlamına gelmez. Iletişim: barissaritas[at]windowslive[nokta]com
- Yanıt Olarak İşaretleyen Marty McFly15 14 Aralık 2013 Cumartesi 15:34
-
Barış bey yine olmadı.
BaglantiKur() SqlCom.CommandText = "ProcTeminIstatistik" SqlCom.CommandType = CommandType.StoredProcedure SqlCom.Connection = Conn SqlCom.Parameters.AddWithValue("@TeminKodu", AnaMenu.LblIsKod.Text) Adap = New SqlClient.SqlDataAdapter(SqlCom) Dim TableDa As New DataTable Adap.Fill(TableDa) DataGridView1.DataSource = TableDa Conn.Close()
kodlayla denedim ancak yine bir sonuç yok.2 Kez aynı işlemi yaptığımda şu hatayı verdi.
Procedure or function ProcTeminIstatistik has too many arguments specified.
- Yanıt Olarak İşaretleyen Marty McFly15 14 Aralık 2013 Cumartesi 15:34
-
Parametreni şöyle eklermisin ?
Dim prm As New SqlParameter prm.ParameterName = "@TeminKodu" prm.SqlDbType = SqlDbType.NVarChar prm.Size = 30 prm.Direction = ParameterDirection.Input prm.Value = AnaMenu.LblIsKod.Text //DataAdapter'a parametre ekliyoruz. dap.SelecCommand.Parameters.Add(prm)
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft urunleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ucretsiz sunmaktadır. Bu icerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk ustlenildiği anlamına gelmez. Iletişim: barissaritas[at]windowslive[nokta]com
- Yanıt Olarak İşaretleyen Marty McFly15 14 Aralık 2013 Cumartesi 15:34
Tüm Yanıtlar
-
VB tarafından parametre gönderiyormusunuz ? VB kodlarınızıda görebilirmiyiz ?
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft urunleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ucretsiz sunmaktadır. Bu icerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk ustlenildiği anlamına gelmez. Iletişim: barissaritas[at]windowslive[nokta]com
-
BaglantiKur() SqlCom = New SqlClient.SqlCommand("ProcTeminIstatistik", Conn) SqlCom.CommandType = CommandType.StoredProcedure SqlCom.Parameters.Add("@TeminKodu", SqlDbType.VarChar) SqlCom.Parameters("@TeminKodu").Value = AnaMenu.LblIsKod.Text SqlCom.Connection.Open() DataGridView1.DataSource = SqlCom.ExecuteNonQuery SqlCom.Connection.Close()
Vb.net kodlarım yukarıda. Aşağıdaki 2 sorgu şeklinle denedim ancak bir türlü verileri çekemedim datagridview kontrolüne.ExecuteNonQuery
ExecuteReader
-
SqlDataAdapter kullanarak yapsanız daha iyi olmazmı ? DataTable'a aktarsanız verileri. GridVew'ın dataSource'unu DataTable olarak gösterseniz sanırım işinizi görür.
Yani Şöyle (C# olarak yazıyorum.)
BaglantiKur(); SqlDataAdapter dap = new SqlDataAdapter("ProcTeminIstatistik",Conn); dap.SelectCommand.CommandType= CommandType.StoredProcedure; dap.SelectCommand.Parameters.AddWithValue("@TeminKodu",AnaMenu.LblIsKod.Text); DataTable dt = new DataTable(); dap.Fill(dt); DataGridView1.DataSource =dt;
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft urunleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ucretsiz sunmaktadır. Bu icerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk ustlenildiği anlamına gelmez. Iletişim: barissaritas[at]windowslive[nokta]com
-
Barış bey;
Öneriniz için teşekkür ederim ancak denedim yinede bir veri alamadım.Sanırım sql tarafındaki kodumda ufak bir hata var.sql tarafında yaptığımda çıktı alabiliyorum tablo olarak ancak vbnette datagridview`a aktarmıyor.Vb.net`e farklı şeklide aktarıyor olabilir mi?
-
Hayır direk Sql'de aldığınız sonucu getirir size. DataAdapter kullanmanız faydalı olur.
Internette VB.Net için stored procedure kullanımına örnek olarak şunu buldum. Aşağıdaki örneği inceleyerek kendinize göre düzenleyip denermisiniz ?
Dim CN As New SqlConnection("Integrated Security=SSPI;Initial Catalog=Okul;Data Source=.\SQLEXPRESS") CN.Open() Dim CMD As SqlCommand = New SqlCommand("S_OgrenciKayit", CN) 'SqlCommand nesnesi varsayilan olarak CommandtType.Text olarak gelir; bunu CommandType.StoredProcedure olarak degistiriyoruz: CMD.CommandType = CommandType.StoredProcedure 'DataAdapter vasitasiyla DataTable'yi dolduruyoruz ve Grid'e bagliyoruz: Dim DA As SqlDataAdapter = New SqlDataAdapter(CMD) Dim DT As DataTable = New DataTable DA.Fill(DT) DataGridView1.DataSource = DT CN.Close()
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft urunleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ucretsiz sunmaktadır. Bu icerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk ustlenildiği anlamına gelmez. Iletişim: barissaritas[at]windowslive[nokta]com
- Yanıt Olarak İşaretleyen Marty McFly15 14 Aralık 2013 Cumartesi 15:34
-
Barış bey yine olmadı.
BaglantiKur() SqlCom.CommandText = "ProcTeminIstatistik" SqlCom.CommandType = CommandType.StoredProcedure SqlCom.Connection = Conn SqlCom.Parameters.AddWithValue("@TeminKodu", AnaMenu.LblIsKod.Text) Adap = New SqlClient.SqlDataAdapter(SqlCom) Dim TableDa As New DataTable Adap.Fill(TableDa) DataGridView1.DataSource = TableDa Conn.Close()
kodlayla denedim ancak yine bir sonuç yok.2 Kez aynı işlemi yaptığımda şu hatayı verdi.
Procedure or function ProcTeminIstatistik has too many arguments specified.
- Yanıt Olarak İşaretleyen Marty McFly15 14 Aralık 2013 Cumartesi 15:34
-
Parametreni şöyle eklermisin ?
Dim prm As New SqlParameter prm.ParameterName = "@TeminKodu" prm.SqlDbType = SqlDbType.NVarChar prm.Size = 30 prm.Direction = ParameterDirection.Input prm.Value = AnaMenu.LblIsKod.Text //DataAdapter'a parametre ekliyoruz. dap.SelecCommand.Parameters.Add(prm)
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft urunleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ucretsiz sunmaktadır. Bu icerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk ustlenildiği anlamına gelmez. Iletişim: barissaritas[at]windowslive[nokta]com
- Yanıt Olarak İşaretleyen Marty McFly15 14 Aralık 2013 Cumartesi 15:34