Надсилання запитів до бази даних 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Надсилання запитів до бази даних



Якщо в вас з’єднання з БД було вдалим, можна приступити до надсилання SQL запитів до неї.

Для цього нам потрібно застосувати клас SqlCommand.

Використовуючи цей клас, ми можемо:

1.Виконати звичайний SQL запит

2.Запустити збережену процедуру

В даному прикладі я створюю його екземпляр, в конструктор передаю стрічку запиту та підключення, за допомогою якого я цей запит буду надсилати. Після ініціалізації команди, я її
запускаю:

  static void Main(string[] args) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); String sql = "UPDATE Customers "; sql += "SET FirstName = 'Fake Name'"; sql += "WHERE Id = 2"; SqlCommand command = new SqlCommand(sql,connection); Int32 affectedRows = command.ExecuteNonQuery(); } }

 

У вікні Server Explorer на вкладці “Stored Procedures” виберіть “Add New Stored Procedure”:

Відкриється вікно, у якому потрібно написати код процедури, тому вставте наступний код:

  CREATE PROCEDURE dbo.InsertCustomer (@FirstName varchar(20), @LastName varchar(20), @Address int) AS INSERT INTO Customers (FirstName, LastName, Address) VALUES (@FirstName, @LastName, @Address)

За допомогою цієї збереженої процедури, ми зможемо добавляти записи в
табличку Customers. В C# коді потрібно змінити тип команди, за допомогою властивості CommandType екземпляру класу SqlCommand. Також потрібно передати вхідні параметри для збереженої процедури, кожен з яких зберігається в екземплярі класу SqlParameter. Для того, щоб якось ідентифікувати параметр, потрібно передати назву параметру та його значення:

  using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand("InsertCustomer", connection); command.CommandType = System.Data.CommandType.StoredProcedure; SqlParameter firstName = new SqlParameter("FirstName", "Evan"); SqlParameter lastName = new SqlParameter("LastName", "Elop"); SqlParameter address = new SqlParameter("Address", 2); command.Parameters.Add(firstName); command.Parameters.Add(lastName); command.Parameters.Add(address); Int32 affectedRows = command.ExecuteNonQuery(); }

Як я вже згадував, у підключеному рівні ADO.NET для зчитування даних використовується клас SqlDataReader. Екземпляр цього класу ми можемо отримати від об’єкта команди, після виконання якогось запиту. Для цього потрібно запустити метод ExecuteReader:

  static void Main(string[] args) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand("SELECT * FROM Customers", connection); SqlDataReader reader = command.ExecuteReader(); } }

SqlDataReader являє собою об’єкт, який дозволяє здійснювати зчитування даних – від початку до кінця.

Для того, щоб перемістити курсор читача на доступний рядок я викликаю метод Read:

  SqlDataReader reader = command.ExecuteReader(); Boolean readResult = reader.Read();

Якщо метод Read повертає true, значить переміщення було вдале, і можна зчитувати дані використовуючи синтаксис індексатора, який приймає стрічку (назву колонки) або число (номер колонки):

  Boolean readResult = reader.Read(); if (readResult) { Console.WriteLine("FirstName: {0}, LastName: {1}", reader["FirstName"], reader[2]); }

Після виконання коду буде прочитано перший рядок та результат буде виведений на екран

Так як наш запит вибирає всі дані в таблиці Customers, потрібно модифікувати код наступним чином, щоб він вивів весь результат запиту на екран:

  SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine("FirstName: {0}, LastName: {1}", reader["FirstName"], reader[2]); }

Всі замовники з таблички Customers в результаті були виведені на екран



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 293; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.61.16 (0.005 с.)