ЯК: Називають параметрами збереженої процедури за допомогою ADO.ЧИСТИЙ і Visual C#.NET

Переклади статей Переклади статей
Номер статті: 310070 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

На цій сторінці

ПІДСУМКИ

Існує декілька способів сценарій виконання ADO.NET називати збереженої процедури а також отримати назад повернути значення та повернення параметри, включаючи:
  • Використовувати об'єкт набору даних , збирати повернутих рядків і працювати з цих рядків, на додаток до повернення значень і повернення параметрів.
  • сценарій виконання об'єкта DataReader зібрати повернутих рядків, щоб перейти через ці рядки а потім збирати повернення значень і повернення параметрів.
  • Використовувати ExecuteScalar метод для повернення цього значення з першого впорядкована стопка карт з чергуванням кольорів до результатів першого рядка з повертаються значень і повернення параметрів. Це найбільш корисно з агрегатна функція.
  • Використовувати ExecuteNonQuery метод для повернення тільки повернення параметрів та повернення значення. Відкидаються всі рядки, які повертаються. Це найбільш корисно для виконання запити.
Ця стаття показує останні три методи і використовує SqlCommand та OleDbCommand об'єктів. Переконайтеся, що скопіювати лише код для керованих постачальника, який ви використовуєте. Якщо ви не впевнені, якого керованих постачальника, ви повинні використовувати, відвідайте такий веб-мережа розробників Майкрософт сайт:
.Постачальників даних МЕРЕЖІ
У кожному зразків в цій статті параметри додаються до колекції параметрівкоманду об'єкт. Під Вільний час сценарій виконання об'єкта SqlCommand , ви не мають додати їх у будь-якого конкретного замовлення, але параметри повинні мати ім'я правильно. Під Вільний час сценарій виконання об'єкта OleDbCommand , ви повинні додати їх в правильному порядку, а не можна використовувати параметри за іменами.

сценарій виконання DataReader для повернення рядків і параметри

DataReader об'єкт можна повернути лише для читання, вперед тільки потоку даних. Інформація, яка містить DataReader може виходити від збереженої процедури. Цей приклад використовує DataReader об'єкт для виконання збереженої процедури, що має вхід і вихід-параметр а потім переходить через повернувся записів для перегляду повернення параметрів.
  1. Створення таких збережених процедур на сервері, на якому запущено Microsoft SQL Server:
    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) 
    					
  2. Створення на нову Visual C#.Застосунок Windows МЕРЕЖІ проекту.
  3. Використовувати за допомогою заяви на системи і System.Data простори імен, так що ви не повинні претендувати декларації в ці простори імен пізніше у вашому коді. Додати цей код у верхній частині форми код модуля. Переконайтеся, що копіювати лише код постачальника, який ви обрали.Клієнт SQL
    using System.Data.SqlClient;
    					
    база даних OLE дані постачальника
    using System.Data.OleDb;
    					
  4. Замінити код в окремий випадок Form_Load наступний код:Клієнт SQL
    SqlConnection PubsConn = new SqlConnection 
    ("Data Source=server;integrated " + 
    "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
    ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
      ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", SqlDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output ;
            
    IdIn.Value = "213-46-8915";
    PubsConn.Open();
    
    SqlDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    база даних OLE дані постачальника
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", OleDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    OleDbDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
  5. Змінення рядка підключення для підключення до об'єкта вказує на комп'ютері, на якому запущено SQL Server.
  6. Запуск коду. Зверніть увагу, що DataReader отримує запис А бізнес-партнера і повертає значення параметра. Читання методом DataReader об'єкта можна використовувати для переміщення по повернувся записів.

    Вікно виводу відображення дисків дві книги, значення 5 і виводу параметр, який містить кількість записів (2). Зверніть увагу, що потрібно закрити DataReader в коді побачити значення параметра. Крім того, зверніть увагу, що вам не доведеться переміщення через всі запис А бізнес-партнера, щоб побачити повернення параметрів, якщо DataReader закрито.

Скористайтеся методом ExecuteScalar об'єкта командного

За допомогою методу ExecuteScalar об'єкта командного для отримання значень параметрів. Крім того, ExecuteScalar повертає першого впорядкована стопка карт з чергуванням кольорів рядку збереженої процедури. Це найбільш корисно для агрегатна функція, як у наведеному нижче прикладі.
  1. Створення таких збережених процедур на сервері, на якому інстальовано SQL Server:
    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)
    					
  2. Створення на нову Visual C#.Застосунок Windows МЕРЕЖІ проекту.
  3. Використовувати за допомогою заяви на системи і System.Data простори імен, так що ви не повинні претендувати декларації в ці простори імен пізніше у вашому коді. Додати цей код у верхній частині форми код модуля. Переконайтеся, що скопіювати лише код постачальника, який ви обрали.Клієнт SQL
    using System.Data.SqlClient;
    					
    база даних OLE дані постачальника
    using System.Data.OleDb;
    					
  4. Додати наступний код події Form_Load :Клієнт SQL
    string strCount;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated " + 
       "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount =testCMD.ExecuteScalar ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    база даних OLE дані постачальника
    string strCount;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount = testCMD.ExecuteScalar().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount);
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
  5. Змінення рядка підключення для підключення до об'єкта вказує на комп'ютері, на якому запущено SQL Server.
  6. Запуск коду. Зверніть увагу, що методом ExecuteScalar об'єкта командного повертає параметри. ExecuteScalar також повертає значення впорядкована стопка карт з чергуванням кольорів 1, рядок 1 повернуті набір рядків. Таким чином, значення intCount є результатом функції count від збереженої процедури.

Скористайтеся методом ExecuteNonQuery об'єкта командного

Цей приклад використовує метод ExecuteNonQuery , щоб виконати запит і повертає значення параметра. ExecuteNonQuery також повертає кількість записів, які впливають після запуску запит на змінення. Однак, ExecuteNonQuery не повертає будь-які рядки або стовпці з збереженої процедури.

ExecuteNonQuery метод є найкращим, під Вільний час сценарій виконання ВСТАВЛЕННЯ, оновити або видалити заяви, якщо ви тільки повинні знати, скільки рядків змінено. У збережених процедур, в яких використовується лише Оператор SELECT ви отримаєте -1, тому що немає рядки вплинув запит.
  1. Створити зберігаються такі інтерактивні елементи на комп'ютері, на якому інстальовано SQL Server:
    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)
    					
  2. Створення на нову Visual C#.Застосунок Windows МЕРЕЖІ проекту.
  3. Використовувати за допомогою заяви на системи і System.Data простори імен, так що ви не повинні претендувати декларації в ці простори імен пізніше у вашому коді. Додати цей код у верхній частині форми код модуля. Переконайтеся, що скопіювати лише код постачальника, який ви обрали.Клієнт SQL
    using System.Data.SqlClient;
    					
    база даних OLE дані постачальника
    using System.Data.OleDb;
    					
  4. Замінити код приватних Form1_Load подія в модуль коду Form1 наступний код:Клієнт SQL
    string strRowAffect;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated Security=sspi;" + 
       "initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter FnameIn = testCMD.Parameters.Add 
       ("@au_fnam", SqlDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    
    strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strRowAffect );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    база даних OLE дані постачальника
    int intRowAffected;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter FnameIn = testCMD.Parameters.Add
       ("@au_fname", OleDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    intRowAffected = testCMD.ExecuteNonQuery();
    
    Console.WriteLine("Number of Rows affected: " + intRowAffected);
    Console.WriteLine(RetVal.Value);
    					
  5. Змінення рядка підключення для підключення до об'єкта вказує на комп'ютері, на якому запущено SQL Server.
  6. Запуск коду. Вікно виводу відображає кількість задіяні рядки (intRowAffect) та значення параметра повернення.

ПОСИЛАННЯ

Щоб отримати додаткові відомості відвідайте такі MSDN веб-сайти:
Введення в.NET Framework бібліотеки класів

Отримання даних за допомогою в DataReader

Властивості

Номер статті: 310070 - Востаннє переглянуто: 12 червня 2012 р. - Редакція: 1.0
ЗАСТОСОВУЄТЬСЯ ДО:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Ключові слова: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtuk
Машинний переклад
УВАГА! Цю статтю переклала програма машинного перекладу Microsoft, а не людина. Корпорація Microsoft пропонує вам як машинні переклади, так і переклади фахівців, щоб Ви мали доступ до всіх статей бази знань рідною мовою. Проте стаття, яку переклав комп’ютер, не завжди бездоганна. Вона може містити лексичні, синтаксичні або граматичні помилки. Так само помиляється іноземець, спілкуючись вашою рідною мовою. Корпорація Microsoft не несе відповідальність за жодні неточності, помилки або шкоду, завдану неправильним перекладом змісту або його використанням з боку користувачів. Крім того, корпорація Microsoft часто оновлює програму машинного перекладу.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 310070

Надіслати відгук

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com