Saklı bir yordam çağrısı geri dönüş değerlerini almak ve parametreler de dahil olmak üzere, geri dönmek için ADO.NET kullanmak için birkaç yol vardır:
- Bir DataSet nesnesi, döndürülen satırları toplamak ve dönüş değerleri ve dönüş parametreleri ek olarak, bu satırlar çalışmak için kullanın.
- Bir DataReader nesnesi, bu satırlar arasında taşımak ve dönüş değerleri toplamak ve parametreleri dönmek için döndürülen satırları toplamak için kullanın.
- Sonuçları dönüş değerlerini ve dönüş parametreleri ilk satırın ilk sütundaki değeri geri dönmek için ExecuteScalar yöntemini kullanın. Bu toplama işlevleriyle kullanışlıdır.
- Yalnızca dönüş parametreleri ve dönüş değerleri geri dönmek için ExecuteNonQuery yöntemini kullanın. Iade edilen satırlar atılır. Bu eylem sorguları yürütmek için kullanışlıdır.
Bu makalede, son üç yöntemi gösterir ve
SqlCommand hem
OleDbCommand nesneleri kullanır. Kullanmakta olduğunuz yönetilen sağlayıcı için yalnızca kod kopyalama emin olun. Kullanmanız gereken hangi yönetilen sağlayıcı emin değilseniz, aşağıdaki Microsoft Developer Network Web sitesini ziyaret edin:
Her birinde, bu makaledeki örneklerde, Parametreler
Command nesnesinin
Parameters derlemesine eklenir.
SqlCommand nesnesi kullandığınızda, Parametreler belirli herhangi bir sırada eklemeyin sahip, ancak parametreleri doğru adı olmalıdır.
OleDbCommand nesne kullandığınızda, doğru sırada parametrelerini eklemelisiniz ve parametreleri adı kullanamazsınız.
Satırlar ve parametreler iade için DataReader kullanın.
DataReader nesnesi, salt okunur, salt ileri veri akışı döndürmek için kullanabilirsiniz.
DataReader içerdiği bilgiler, bir saklı yordam gelebilir. Bu örnek,
DataReader nesnesi bir giriş ve bir çıkış parametresi vardır ve ardından iade parametrelerini görüntülemek için döndürülen kayıtlar arasında hareket saklı bir yordamı çalıştırmak için kullanır.
- Microsoft SQL Server çalıştırılan sunucuda aşağıdaki saklı yordamı oluştur:
Create Procedure TestProcedure
(
@au_idIN varchar (11),
@numTitlesOUT Integer OUTPUT
)
As
select A.au_fname, A.au_lname, T.title
from authors as A join titleauthor as TA on
A.au_id=TA.au_id
join titles as T
on T.title_id=TA.title_id
where A.au_id=@au_idIN
set @numTitlesOUT = @@Rowcount
return (5)
- ımports</a0> deyimini, kodunuzun daha sonra bu ad boşluklarında bildirimlerinde geçerli olması için Sistem ve System.Data ad alanlarını kullanın. Imports ifadesine tüm diğer bildirimlerden önce kullanmalısınız. Yalnızca kopyaladığınızdan emin olun, seçilen. SQL istemci
Imports System.Data.SqlClient
OLE DB Data ProviderImports System.Data.OleDb
olduğunu sağlayıcısı için kod - Add the following code to the Form_Load event:SQL Client
Dim PubsConn As SqlConnection = New SqlConnection & _
("Data Source=server;integrated security=sspi;" & _
"initial Catalog=pubs;")
Dim testCMD As SqlCommand = New SqlCommand & _
("TestProcedure", PubsConn)
testCMD.CommandType = CommandType.StoredProcedure
Dim RetValue As SqlParameter = testCMD.Parameters.Add & _
("RetValue", SqlDbType.Int)
RetValue.Direction = ParameterDirection.ReturnValue
Dim auIDIN As SqlParameter = testCMD.Parameters.Add & _
("@au_idIN", SqlDbType.VarChar, 11)
auIDIN.Direction = ParameterDirection.Input
Dim NumTitles As SqlParameter = testCMD.Parameters.Add & _
("@numtitlesout", SqlDbType.Int)
NumTitles.Direction = ParameterDirection.Output
auIDIN.Value = "213-46-8915"
PubsConn.Open()
Dim myReader As SqlDataReader = testCMD.ExecuteReader()
Console.WriteLine("Book Titles for this Author:")
Do While myReader.Read
Console.WriteLine("{0}", myReader.GetString(2))
Loop
myReader.Close()
Console.WriteLine("Return Value: " & (RetValue.Value))
Console.WriteLine("Number of Records: " & (NumTitles.Value))
OLE DB Data Provider
Dim PubsConn As OleDbConnection = New OleDbConnection & _
("Provider=sqloledb;Data Source=server;" & _
"integrated security=sspi;initial Catalog=pubs;")
Dim testCMD As OleDbCommand = New OleDbCommand & _
("TestProcedure", PubsConn)
testCMD.CommandType = CommandType.StoredProcedure
Dim RetValue As OleDbParameter = testCMD.Parameters.Add & _
("RetValue", OleDbType.Integer)
RetValue.Direction = ParameterDirection.ReturnValue
Dim auIDIN As OleDbParameter = testCMD.Parameters.Add & _
("@au_idIN", OleDbType.VarChar, 11)
auIDIN.Direction = ParameterDirection.Input
Dim NumTitles As OleDbParameter = testCMD.Parameters.Add & _
("@numtitlesout", OleDbType.Integer)
NumTitles.Direction = ParameterDirection.Output
auIDIN.Value = "213-46-8915"
PubsConn.Open()
Dim myReader As OleDbDataReader = testCMD.ExecuteReader()
Console.WriteLine("Book Titles for this Author:")
Do While myReader.Read
Console.WriteLine("{0}", myReader.GetString(2))
Loop
myReader.Close()
Console.WriteLine("Return Value: " & (RetValue.Value))
Console.WriteLine("Number of Records: " & (NumTitles.Value))
- Bağlantı nesnesi, SQL'ın çalıştığı sunucuya işaret etmek için bağlantı dizesini değiştirin Server.
- Kodu çalıştırın. DataReader kayıtları alır ve daha sonra parametre değerleri döndürür dikkat edin. Döndürülen kayıtlar arasında taşımak için DataReader nesnesi <a1>Okuma</a1> yöntemini kullanabilirsiniz.
Çıktı iki kitap başlıklarını, dönüş değeri, 5 ve <a1>Kayıt</a1> (2) sayısını içeren bir çıkış parametresi penceresi görüntülenir. Parametre değerleri görmek için DataReader kodda kapatmalısınız dikkat edin. Ayrıca, DataReader kapalıysa, dönüş parametrelerini görmek için tüm kayıtları taşımak zorunda unutmayın.
Command nesnesinin ExecuteScalar yöntemini kullanın.
Parametre değerleri almak için
Command nesnesinin
ExecuteScalar yöntemini kullanabilirsiniz. Ayrıca,
ExecuteScalar saklı yordamın ilk satırın ilk sütunu döndürür. Bu aşağıdaki örnekte olduğu gibi toplama işlevleri için kullanışlıdır.
- Saklı yordamını SQL Server çalıştıran sunucu için oluşturma:
Create Procedure TestProcedure2
(
@au_idIN varchar (11)
)
As
/* set nocount on */
select count (T.title)
from authors as A join titleauthor as TA on
A.au_id=TA.au_id
join titles as T
on T.title_id=TA.title_id
where A.au_id=@au_idIN
Return(5)
- ımports</a0> deyimini, kodunuzun daha sonra bu ad boşluklarında bildirimlerinde geçerli olması için Sistem ve System.Data ad alanlarını kullanın. Imports ifadesine tüm diğer bildirimlerden önce kullanmalısınız. Seçilen. SQL istemci
Imports System.Data.SqlClient
OLE DB Data ProviderImports System.Data.OleDb
olduğunuz sağlayıcısı için yalnızca kod kopyalama emin olun - Form_Load olay için aşağıdaki kodu ekleyin: SQL istemci
Dim PubsConn As SqlConnection = New SqlConnection & _
("Data Source=server;integrated security=sspi;" & _
"initial Catalog=pubs;")
Dim testCMD As SqlCommand = New SqlCommand & _
("TestProcedure2", PubsConn)
testCMD.CommandType = CommandType.StoredProcedure
Dim RetValue As SqlParameter = testCMD.Parameters.Add & _
("RetValue", SqlDbType.Int)
RetValue.Direction = ParameterDirection.ReturnValue
Dim auIDIN As SqlParameter = testCMD.Parameters.Add & _
("@au_idIN", SqlDbType.VarChar, 11)
auIDIN.Direction = ParameterDirection.Input
auIDIN.Value = "213-46-8915"
PubsConn.Open()
Dim intCount As Integer = testCMD.ExecuteScalar
Console.WriteLine(intCount)
Console.WriteLine("Return Value: " & (RetValue.Value))
OLE DB Data Provider
Dim PubsConn As OleDbConnection = New OleDbConnection & _
("Provider=SQLOLEDB;Data Source=server;" & _
"integrated Security=sspi;initial catalog=pubs;")
Dim testCMD As OleDbCommand = New OleDbCommand & _
("TestProcedure2", PubsConn)
testCMD.CommandType = CommandType.StoredProcedure
Dim RetVal As OleDbParameter = testCMD.Parameters.Add & _
("RetVal", OleDbType.Integer)
RetVal.Direction = ParameterDirection.ReturnValue
Dim IdIn As OleDbParameter = testCMD.Parameters.Add & _
("@au_idIN", OleDbType.VarChar, 11)
IdIn.Direction = ParameterDirection.Input
IdIn.Value = "213-46-8915"
PubsConn.Open()
Dim intCount As Integer = testCMD.ExecuteScalar
Console.WriteLine("Number of Rows: " & intCount)
Console.WriteLine(RetVal.Value)
- Bağlantı nesnesi, SQL'ın çalıştığı sunucuya işaret etmek için bağlantı dizesini değiştirin Server.
- Kodu çalıştırın. ExecuteScalar yöntemi <a0>Command</a0> nesnesinin parametrelerini döndürmesidir dikkat edin. ExecuteScalar de sütun 1, satır 1 döndürülen satır değerini verir. Bu nedenle, intCount saklı yordamdan gelen <a1>sayı</a1> işlevinin sonucu değeridir.
Command nesnesinin ExecuteNonQuery yöntemini kullanın.
Bu örnek, sorguyu çalıştırmak ve parametre değerlerini vermesini
ExecuteNonQuery yöntemini kullanır.
ExecuteNonQuery de sorgu çalıştıktan sonra etkilenen kayıtların sayısını verir. Ancak,
ExecuteNonQuery herhangi bir satır veya sütun saklı yordamdan döndürmez.
ExecuteNonQuery yönteminin kaç satır değiştirilen bilmeniz yeterlidir, INSERT, UPDATE veya DELETE deyimleri kullandığınızda daha kullanışlıdır. Bir SELECT deyimi kullanıyorsunuz saklı yordamda sorgulamadan etkilenen satır için -1 alır.
- Saklı yordamını SQL Server çalıştıran sunucu için oluşturma:
Create Procedure TestProcedure3
(
@au_idIN varchar (11),
@au_fnam varchar (30)
)
As
/* set nocount on */
Update authors set au_fname = @au_fnam
where au_id = @au_idin
return (5)
- ımports</a0> deyimini, kodunuzun daha sonra bu ad boşluklarında bildirimlerinde geçerli olması için Sistem ve System.Data ad alanlarını kullanın. Imports ifadesine tüm diğer bildirimlerden önce kullanmalısınız. Seçilen. SQL istemci
Imports System.Data.SqlClient
OLE DB Data ProviderImports System.Data.OleDb
olduğunuz sağlayıcısı için yalnızca kod kopyalama emin olun - Form_Load olay için aşağıdaki kodu ekleyin: SQL istemci
Dim PubsConn As SqlConnection = New SqlConnection & _
("Data Source=server;integrated security=sspi;" & _
"initial Catalog=pubs;")
Dim testCMD As SqlCommand = New SqlCommand & _
("TestProcedure3", PubsConn)
testCMD.CommandType = CommandType.StoredProcedure
Dim RetValue As SqlParameter = testCMD.Parameters.Add & _
("RetValue", SqlDbType.Int)
RetValue.Direction = ParameterDirection.ReturnValue
Dim auIDIN As SqlParameter = testCMD.Parameters.Add & _
("@au_idIN", SqlDbType.VarChar, 11)
auIDIN.Direction = ParameterDirection.Input
Dim auFname As SqlParameter = testCMD.Parameters.Add & _
("@au_fnam", SqlDbType.VarChar, 30)
auFname.Direction = ParameterDirection.Input
auIDIN.Value = "213-46-8915"
auFname.Value = "Marjorie"
PubsConn.Open()
Dim rvRows As Integer = testCMD.ExecuteNonQuery
Console.WriteLine(rvRows)
Console.WriteLine(RetValue.Value)
OLE DB Data Provider
Dim PubsConn As OleDbConnection = New OleDbConnection & _
("Provider=SQLOLEDB;Data Source=server;" & _
"integrated Security=sspi;initial catalog=pubs;")
Dim testCMD As OleDbCommand = New OleDbCommand & _
("TestProcedure3", PubsConn)
testCMD.CommandType = CommandType.StoredProcedure
Dim RetVal As OleDbParameter = testCMD.Parameters.Add & _
("RetVal", OleDbType.Integer)
RetVal.Direction = ParameterDirection.ReturnValue
Dim IdIn As OleDbParameter = testCMD.Parameters.Add & _
("@au_idIN", OleDbType.VarChar, 11)
IdIn.Direction = ParameterDirection.Input
Dim FnameIn As OleDbParameter = testCMD.Parameters.Add & _
("@au_fname", OleDbType.VarChar, 30)
FnameIn.Direction = ParameterDirection.Input
IdIn.Value = "213-46-8915"
FnameIn.Value = "Marjorie"
PubsConn.Open()
Dim intRowAffected As Integer = testCMD.ExecuteNonQuery
Console.WriteLine("Number of Rows affected: " & intRowAffected)
Console.WriteLine(RetVal.Value)
- Bağlantı nesnesi, SQL'ın çalıştığı sunucuya işaret etmek için bağlantı dizesini değiştirin Server.
- Kodu çalıştırın. Etkilenen satır (intRowAffect) ve dönüş parametresinin değeri, çıkış penceresini görüntüler.
Ek bilgi için aşağıdaki MSDN Web sitelerini ziyaret edin:
ADO.NET ve Visual Basic .NET hakkında daha fazla genel bilgi için aşağıdaki MSDN haber grupları'nı ziyaret edin:
microsoft.public.dotnet.framework.adonet
(http://msdn.microsoft.com/newsgroups/default.aspx?query=microsoft.public.dotnet.framework.adonet&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)
microsoft.public.dotnet.languages.vb
(http://msdn.microsoft.com/newsgroups/default.aspx?query=microsoft.public.dotnet.languages.vb&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)
Daha fazla bilgi için aşağıdaki Microsoft Eğitim & sertifika kurs bakın: