Форум программистов, компьютерный форум CyberForum.ru

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 1060, средняя оценка - 4.88
Rockedit
Автор FAQ
Автор FAQ
1756 / 562 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
#1

Работа с подключенным уровнем ADO .NET в C# - C#

16.09.2010, 14:19. Просмотров 142961. Ответов 2
Метки нет (Все метки)

FAQ для раздела “ADO.NET и базы данных”

Тема: ”Работа с подключенным уровнем ADO .NET в C#”


Обсуждение ведется тут.

Содержание

1) Теоретическая часть
1.1 Поставщики данных .NET Framework (ADO.NET)
1.2 Основные объекты поставщиков данных .NET Framework:
1.3 Пару слов об интерфейсах IDataReader и IDbCommand
1.4 Подробнее о поставщике данных для SQL Server

2) Практическая часть

2.1 Как создать БД?
2.2 Как создать таблицу?
2.3 Как вывести все записи из таблицы?
2.4 Как добавить запись в таблицу?
2.5 Как удалить запись из таблицы?
2.6 Как изменить запись в таблице?
2.7 Как удалить таблицу?
2.8 Собирая все вместе

3) Заключение




1. Теоретическая часть

Здравствуйте! В этом FAQ я расскажу, некоторые основные аспекты работы с подключенным уровнем ADO .NET в C#(на примере подключения к БД MS SQL Server) и начнем мы с рассмотрения поставщиков данных:

1.1 Поставщики данных .NET Framework (ADO.NET)


Поставщик данных .NET Framework используется для установления соединения с базой данных, выполнения команд и получения результатов.Эти результаты обрабатываются непосредственно, помещаются в DataSet, чтобы по мере необходимости они были доступны для пользователей вместе с данными из нескольких источников, либо распределяются между уровнями. Источники данных .NET Framework являются упрощенными и создают минимальный уровень между источником данных и кодом, увеличивая тем самым производительность без ущерба для функциональных возможностей.

Cписок поставщиков данных .NET Framework:

• .NET Framework Поставщик данных для SQL Server
Предоставляет доступ к данным для Microsoft SQL Server 7.0 или более поздних версий.Использует пространство имен System.Data.SqlClient.

• .NET Framework Поставщик данных для OLE DB
Для источников данных OLE DB.Использует пространство имен System.Data.OleDb.

• .NET Framework Поставщик данных для ODBC
Для источников данных ODBC.Использует пространство имен System.Data.Odbc.

• .NET Framework Поставщик данных для Oracle
Для источников данных Oracle.Источник данных .NET Framework для Oracle поддерживает клиентское программное обеспечение версии 8.1.7 и старше и использует пространство имен System.Data.OracleClient.

• Поставщик EntityClient
Предоставляет доступ к данным для приложений модели EDM (Entity Data Model).Использует пространство имен System.Data.EntityClient.


1.2 Основные объекты поставщиков данных .NET Framework:

Connection
Устанавливает соединение с конкретным источником данных.Базовым классом для всех объектов Connection является DbConnection.

Command
Выполняет команду в источнике данных.Обеспечивает доступность Parameters и может выполнять команды в области Transaction из Connection.Базовым классом для всех объектов Command является DbCommand.

DataReader
Считывает из источника данных однопроходный поток данных только для чтения.Базовым классом для всех объектов DataReader является DbDataReader.

DataAdapter
Заполняет DataSet и выполняет обновления в источнике данных.Базовым классом для всех объектов DataAdapter является DbDataAdapter.

1.3 Пару слов об интерфейсах IDataReader и IDbCommand


IDataReader - интерфейс


Позволяет читать один или несколько потоков результирующих наборов только в направлении вперед, выполняя команду над источником данных. Он реализуется поставщиками данных .NET Framework, обращающимися к реляционным базам данных.

Пространство имен: System.Data

Интерфейсы IDataReader и IDataRecord позволяют классу-наследнику реализовать класс DataReader, позволяющий читать один или несколько потоков наборов результатов только в направлении вперед. Приложение создает не непосредственно экземпляр интерфейса IDataReader, а экземпляр класса, являющегося наследником IDataReader.
Классы, являющиеся наследниками IDataReader, должны реализовывать наследуемые члены. Обычно они также определяют дополнительные члены для добавления функциональных возможностей, зависящих от поставщика данных.

Изменения, внесенные в результирующий набор другим процессом или потоком во время чтения данных, могут быть видимы пользователю или классу, реализующему интерфейс IDataReader. Однако точное поведение зависит от поставщика и от временных зависимостей.

Примечания для реализующих объектов:

Для достижения единообразия среди поставщиков данных .NET Framework наследующие классы следует именовать в форме Prv "команда", где Prv — постоянный префикс, назначаемый всем классам в пространстве имен определенного поставщика данных .NET Framework. Например, Sql является префиксом класса SqlDataAdapter в пространстве имен System.Data.SqlClient.


IDbCommand - интерфейс


Представляет собой оператор SQL, исполняемый при подключении к источнику данных и реализуемый поставщиками данных .NET Framework, которые имеют доступ к реляционным базам данных.

Пространство имен: System.Data

Интерфейс IDbCommand позволяет наследующему классу реализовывать класс Command, являющийся инструкцией SQL, исполняемой в источнике данных.
Приложение создает не непосредственно экземпляр интерфейса IDbCommand, а экземпляр класса, являющегося наследником IDbCommand.
Классы, наследующие IDbCommand, должны реализовывать все наследуемые элементы. Обычно они также определяют дополнительные элементы для добавления функциональных возможностей, зависящих от поставщика. Например, интерфейс IDbCommand определяет метод ExecuteNonQuery. В свою очередь, класс SqlCommand наследует этот метод, а также определяет метод ExecuteXmlReader.

Примечания для реализующих объектов:

Для достижения единообразия среди поставщиков данных .NET Framework наследующие классы следует называть в форме PrvClassname, где Prv — постоянный префикс, назначаемый всем классам в пространстве имен определенного поставщика данных .NET Framework. Например, Sql является префиксом класса SqlCommand в пространстве имен System.Data.SqlClient.


1.4 Подробнее о поставщике данных для SQL Server

В данном FAQ мы рассмотрим 4 класса - SqlConnection, SqlCommand, SqlDataReader, SqlParameter .

SqlConnection – класс

Предоставляет открытое подключение к базе данных SQL Server.Этот класс не может быть унаследован.

Пространство имен: System.Data.SqlClient

public sealed class SqlConnection : DbConnection,
ICloneable


( http://msdn.microsoft.com/ru-ru/libr...onnection.aspx )

SqlCommand – класс

Представляет инструкцию Transact-SQL или хранимую процедуру, выполняемую над базой данных SQL Server.Этот класс не может быть унаследован.

Пространство имен: System.Data.SqlClient

public sealed class SqlCommand : DbCommand,
ICloneable


( http://msdn.microsoft.com/ru-ru/libr...qlcommand.aspx )

SqlDataReader – класс

Предоставляет возможность чтения потока строк только в прямом направлении из базы данных SQL Server.Данный класс не может наследоваться.

Пространство имен: System.Data.SqlClient

public class SqlDataReader : DbDataReader,
IDataReader, IDisposable, IDataRecord


SqlParameter - класс

Предоставляет параметр для объекта SqlCommand и, при необходимости, его отображение на DataSet.Этот класс не может быть унаследован.

Пространство имен: System.Data.SqlClient

public sealed class SqlParameter : DbParameter,
IDbDataParameter, IDataParameter, ICloneable


( http://msdn.microsoft.com/ru-ru/libr...parameter.aspx )

Подробнее о пространстве имен System.Data.SqlClient
( http://msdn.microsoft.com/ru-ru/libr...sqlclient.aspx )



Но все это были общие понятия, а теперь перейдём к практике.

2. Практическая часть

Для всех примеров используется БД с именем Univer и одной таблицей Students, следующей структуры -
1) int ID – идентификатор
2) string FIO – ФИО студента
3) string Grupa – Группа.
и СУБД MS SQL EXPRESS
Свой материал я построил в виде ответов на вопросы

2.1 Как создать БД?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Data.SqlClient;
using System.Data;
using System.Threading;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                // Если база не обнаружена, то создаем новую
                if (se.Number == 4060)
                {
                    Console.WriteLine("Подождите, идет создание БД");
                    //закрываем соединение
                    conn.Close();
                    //переопределяем обьект conn, и передаем новую строку подключения
                    conn = new SqlConnection(@"Data Source=(local)\SQLEXPRESS;Integrated Security=True");
                    /*Создаем экземпляр класса  SqlCommand по имени cmdCreateDataBase
                     и передаем конструктору этого класса, запрос на создание БД
                     и объект типа SqlConnection
                      */
                    SqlCommand cmdCreateDataBase = new SqlCommand(string.Format("CREATE DATABASE [{0}]", "Test"), conn);
                    //открываем подключение
                    conn.Open();
                    /*Посылаем запрос к СУБД
                     В данном случае, в результате запроса ничего не возврашается
                     ExecuteNonQuery, в последующих примерах мы будем использовать
                     и другие методы
                     */
                    Console.WriteLine("Посылаем запрос");
                    cmdCreateDataBase.ExecuteNonQuery();
                    //закрываем подключение
                    conn.Close();
                    //задержка, нужна для того, чтоб БД успела создаться
                    Thread.Sleep(5000);
                    //переопределяем обьект conn, и передаем новую строку подключения
                    conn = new SqlConnection(connStr);
                    //открываем подключение
                    conn.Open();
                }
            }
            finally
            {
                Console.WriteLine("Соедение успешно произведено");
                conn.Close();
                conn.Dispose();
            }
 
        }
    }
}
2.2 Как создать таблицу?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}",se.Message);
                return;
            }
 
                Console.WriteLine("Соедение успешно произведено");
                /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
                 и передаем конструктору этого класса, запрос на создание таблицы
                 и объект типа SqlConnection
                */
 
                SqlCommand cmdCreateTable = new SqlCommand("CREATE TABLE " +
            "Students (ID int not null" +
            ", FIO char(60) not null," +
            "  Grupa char(20) not null)", conn);
            //посылаем запрос
             try
            {
                cmdCreateTable.ExecuteNonQuery();
            }
            catch 
            {
                Console.WriteLine("Ошибка при создании таблицы");
                return;
            }
 
                Console.WriteLine("Таблица создана успешно");
            //закрвываем соединение
                conn.Close();
                conn.Dispose();
            }
 
        }
}
2.3 Как вывести все записи из таблицы?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}",se.Message);
                return;
            }
 
                Console.WriteLine("Соедение успешно произведено");
                /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
                 и передаем конструктору этого класса, запрос на 
                 получение всех строк таблицы Students
                 и объект типа SqlConnection
                */
 
                SqlCommand cmd = new SqlCommand("Select * From Students", conn);
                /*Метод ExecuteReader() класса SqlCommand возврашает
                 объект типа SqlDataReader, с помошью которого мы можем
                 прочитать все строки, возврашенные в результате выполнения запроса
                 CommandBehavior.CloseConnection - закрываем соединение после запроса
                 */
                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
               {
                    //цикл по всем столбцам полученной в результате запроса таблицы
                   for (int i = 0; i < dr.FieldCount; i++)
                       /*метод GetName() класса SqlDataReader позволяет получить имя столбца
                        по номеру, который передается в качестве параметра, данному методу
                        и озночает номер столбца в таблице(начинается с 0)
                        */
                       Console.Write("{0}\t",dr.GetName(i).ToString().Trim());
                    /*читаем данные из таблицы
                     чтение происходит только в прямом направлении
                     все прочитаные строки отбрасываюся */
                    while (dr.Read())
                       {
                           /*метод GetValue() класса SqlDataReader позволяет получить значение столбца
                                                   по номеру, который передается в качестве параметра, данному методу
                                                   и озночает номер столбца в таблице(начинается с 0)
                                                   */
                           Console.WriteLine("{0}\t{1}\t{2}",dr.GetValue(0).ToString().Trim(),
                            dr.GetValue(1).ToString().Trim(),
                            dr.GetValue(2).ToString().Trim());
                       }
                }
            //закрвываем соединение
                conn.Close();
                conn.Dispose();
                Console.WriteLine();
            }
 
        }
    }
2.4 Как добавить запись в таблицу?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}",se.Message);
                return;
            }
 
                Console.WriteLine("Соедение успешно произведено");
                /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
                 и передаем конструктору этого класса, запрос на 
                 добавление строки в  таблицу Students
                 и объект типа SqlConnection
                */
               
                SqlCommand cmd = new SqlCommand("Insert into Students" +
                "(ID,FIO,Grupa) Values (@ID,@FIO,@Grupa)", conn);
            /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
            кол-во ошибок и достичь большего быстродействия
             но требует и больших усилий в написании кода*/
            //объявляем объект класса SqlParameter
            SqlParameter param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@ID";
            //задаем значение параметра
            param.Value = 10;
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Int;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);
            //переопределяем объект класса SqlParameter
            param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@FIO";
            //задаем значение параметра
            param.Value = "Иванов Иван Иванович";
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Text;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);
            //переопределяем объект класса SqlParameter
            param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@Grupa";
            //задаем значение параметра
            param.Value = "4-2";
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Text;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);               
        Console.WriteLine("Вставляем запись");
                try
                {
                    cmd.ExecuteNonQuery();
                }
            catch
            {
                Console.WriteLine("Ошибка, при выполнении запроса на добавление записи");
                return;
            }
               //Выводим значение на экран
                cmd = new SqlCommand("Select * From Students", conn);
                /*Метод ExecuteReader() класса SqlCommand возврашает
                 объект типа SqlDataReader, с помошью которого мы можем
                 прочитать все строки, возврашенные в результате выполнения запроса
                 CommandBehavior.CloseConnection - закрываем соединение после запроса
                 */
                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
               {
                    //цикл по всем столбцам полученной в результате запроса таблицы
                   for (int i = 0; i < dr.FieldCount; i++)
                       /*метод GetName() класса SqlDataReader позволяет получить имя столбца
                        по номеру, который передается в качестве параметра, данному методу
                        и озночает номер столбца в таблице(начинается с 0)
                        */
                       Console.Write("{0}\t",dr.GetName(i).ToString().Trim());
                    /*читаем данные из таблицы
                     чтение происходит только в прямом направлении
                     все прочитаные строки отбрасываюся */
                   Console.WriteLine();
                    while (dr.Read())
                       {
                           /*метод GetValue() класса SqlDataReader позволяет получить значение столбца
                                                   по номеру, который передается в качестве параметра, данному методу
                                                   и озночает номер столбца в таблице(начинается с 0)
                                                   */
                           Console.WriteLine("{0}\t{1}\t{2}",dr.GetValue(0).ToString().Trim(),
                            dr.GetValue(1).ToString().Trim(),
                            dr.GetValue(2).ToString().Trim());
                       }
                }
            //закрвываем соединение
                conn.Close();
                conn.Dispose();
                Console.WriteLine();
            }
 
        }
    }
2.5 Как удалить запись из таблицы?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}",se.Message);
                return;
            }
 
                Console.WriteLine("Соедение успешно произведено");
                /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
                 и передаем конструктору этого класса, запрос на 
                 удаление строк таблицы Students, которые отвечают условиям
                 и объект типа SqlConnection
                */
               
                SqlCommand cmd = new SqlCommand("Delete From Students" +
                    " where ID = @ID  and FIO = @FIO", conn);
          /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
            кол-во ошибок и достичь большего быстродействия
             но требует и больших усилий в написании кода*/
            //объявляем объект класса SqlParameter
            SqlParameter param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@ID";
            //задаем значение параметра
            param.Value = 10;
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Int;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);
            //переопределяем объект класса SqlParameter
            param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@FIO";
            //задаем значение параметра
            param.Value = "Иванов Иван Иванович";
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Text;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);
 
                Console.WriteLine("Удаляем запись");
                try
                {
                    cmd.ExecuteNonQuery();
                }
            catch
            {
                Console.WriteLine("Ошибка, при выполнении запроса на удаление записи");
                Console.WriteLine("Возможно запись уже удалена");
 
                return;
            }
               //Выводим значение на экран
                cmd = new SqlCommand("Select * From Students", conn);
                /*Метод ExecuteReader() класса SqlCommand возврашает
                 объект типа SqlDataReader, с помошью которого мы можем
                 прочитать все строки, возврашенные в результате выполнения запроса
                 CommandBehavior.CloseConnection - закрываем соединение после запроса
                 */
                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
               {
                    //цикл по всем столбцам полученной в результате запроса таблицы
                   for (int i = 0; i < dr.FieldCount; i++)
                       /*метод GetName() класса SqlDataReader позволяет получить имя столбца
                        по номеру, который передается в качестве параметра, данному методу
                        и озночает номер столбца в таблице(начинается с 0)
                        */
                       Console.Write("{0}\t",dr.GetName(i).ToString().Trim());
                    /*читаем данные из таблицы
                     чтение происходит только в прямом направлении
                     все прочитаные строки отбрасываюся */
                   Console.WriteLine();
                    while (dr.Read())
                       {
                           /*метод GetValue() класса SqlDataReader позволяет получить значение столбца
                                                   по номеру, который передается в качестве параметра, данному методу
                                                   и озночает номер столбца в таблице(начинается с 0)
                                                   */
                           Console.WriteLine("{0}\t{1}\t{2}",dr.GetValue(0).ToString().Trim(),
                            dr.GetValue(1).ToString().Trim(),
                            dr.GetValue(2).ToString().Trim());
                       }
                }
            //закрвываем соединение
                conn.Close();
                conn.Dispose();
                Console.WriteLine();
            }
 
        }
    }
2.6 Как изменить запись в таблице?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}",se.Message);
                return;
            }
 
                Console.WriteLine("Соедение успешно произведено");
                /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
                 и передаем конструктору этого класса, запрос на 
               изменение строк таблицы Students, которые отвечают условиям
                 и объект типа SqlConnection
                */
               
SqlCommand cmd = new SqlCommand("Update Students" +
                " Set ID = @ID where FIO = @FIO", conn);
            /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
            кол-во ошибок и достичь большего быстродействия
            но требует и больших усилий в написании кода*/
            //объявляем объект класса SqlParameter
            SqlParameter param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@ID";
            //задаем значение параметра
            param.Value = 10;
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Int;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);
            //переопределяем объект класса SqlParameter
            param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@FIO";
            //задаем значение параметра
            param.Value = "Иванов Иван Иванович";
            //задаем тип параметра
            param.SqlDbType = SqlDbType.Text;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);              
  Console.WriteLine("Изменяем запись(и)");
                try
                {
                    cmd.ExecuteNonQuery();
                }
            catch
            {
                Console.WriteLine("Ошибка, при выполнении запроса на изменение записи(ей)");
 
                return;
            }
               //Выводим значение на экран
                cmd = new SqlCommand("Select * From Students", conn);
                /*Метод ExecuteReader() класса SqlCommand возврашает
                 объект типа SqlDataReader, с помошью которого мы можем
                 прочитать все строки, возврашенные в результате выполнения запроса
                 CommandBehavior.CloseConnection - закрываем соединение после запроса
                 */
                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
               {
                    //цикл по всем столбцам полученной в результате запроса таблицы
                   for (int i = 0; i < dr.FieldCount; i++)
                       /*метод GetName() класса SqlDataReader позволяет получить имя столбца
                        по номеру, который передается в качестве параметра, данному методу
                        и озночает номер столбца в таблице(начинается с 0)
                        */
                       Console.Write("{0}\t",dr.GetName(i).ToString().Trim());
                    /*читаем данные из таблицы
                     чтение происходит только в прямом направлении
                     все прочитаные строки отбрасываюся */
                   Console.WriteLine();
                    while (dr.Read())
                       {
                           /*метод GetValue() класса SqlDataReader позволяет получить значение столбца
                                                   по номеру, который передается в качестве параметра, данному методу
                                                   и озночает номер столбца в таблице(начинается с 0)
                                                   */
                           Console.WriteLine("{0}\t{1}\t{2}",dr.GetValue(0).ToString().Trim(),
                            dr.GetValue(1).ToString().Trim(),
                            dr.GetValue(2).ToString().Trim());
                       }
                }
            //закрвываем соединение
                conn.Close();
                conn.Dispose();
                Console.WriteLine();
            }
 
        }
    }
2.7 Как удалить таблицу?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}", se.Message);
                return;
            }
 
            Console.WriteLine("Соедение успешно произведено");
            /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
             и передаем конструктору этого класса, запрос на удаление таблицы
             и объект типа SqlConnection
            */
 
            SqlCommand cmdCreateTable = new SqlCommand("DROP TABLE Student", conn);
            //посылаем запрос
            try
            {
                cmdCreateTable.ExecuteNonQuery();
            }
            catch 
            {
                Console.WriteLine("Ошибка при удалении таблицы");
                return;
            }
            Console.WriteLine("Таблица удалена успешно");
            //закрвываем соединение
            conn.Close();
            conn.Dispose();
        }
 
    }
}
2.8 Собирая все вместе

В конце, хочу предложить простенькое консольное приложение, которое:

1) Создает новую таблицу
2) Добавляет в нее записи
3) Выводит результат в консоль
4) Изменяет некоторые из них
5) Выводит результат в консоль
6) Удаляет некоторые из них
7) Выводит результат в консоль
8) Удаляет таблицу
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
 
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
 строку подключения 
 Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
 Initial Catalog - имя БД 
 Integrated Security=-параметры безопасности
 Мое подключение имеет вид
 */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}", se.Message);
                return;
            }
 
            Console.WriteLine("Соедение успешно произведено");
            /*Создаем экземпляр класса  SqlCommand по имени cmdCreateTable
             и передаем конструктору этого класса, запрос на создание таблицы
             и объект типа SqlConnection
            */
 
            CreateNewTable(conn);
            InsertToTable(conn);
            ShowFields(conn);
            UpdateFromTable(conn);
            ShowFields(conn);
            DeleteFromTable(conn);
            ShowFields(conn);
            DeleteTable(conn);
            //закрвываем соединение
            conn.Close();
            conn.Dispose();
 
 
 
 
 
        }
 
        private static void DeleteTable(SqlConnection conn)
        {
            using (SqlCommand cmdDeleteTable = new SqlCommand("DROP TABLE Students", conn))
            {
 
                //посылаем запрос
                try
                {
                    cmdDeleteTable.ExecuteNonQuery();
                }
                catch
                {
                    Console.WriteLine("Ошибка при удалении таблицы");
                    return;
                }
            }
            Console.WriteLine("Таблица удалена успешно");
        }
        private static void DeleteFromTable(SqlConnection conn)
        {
            using (SqlCommand cmd = new SqlCommand("Delete From Students" +
                 " where ID = @ID or FIO = @FIO", conn))
            {
                /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
                  кол-во ошибок и достичь большего быстродействия
                  но требует и больших усилий в написании кода*/
                //объявляем объект класса SqlParameter
                SqlParameter param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@ID";
                //задаем значение параметра
                param.Value = 100;
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Int;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
                //переопределяем объект класса SqlParameter
                param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@FIO";
                //задаем значение параметра
                param.Value = "Иванов Иван";
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Text;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
 
                Console.WriteLine("Удаляем запись");
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch
                {
                    Console.WriteLine("Ошибка, при выполнении запроса на удаление записи");
                    Console.WriteLine("Возможно запись уже удалена");
 
                    return;
                }
            }
 
        }
        private static void UpdateFromTable(SqlConnection conn)
        {
            using (SqlCommand cmd = new SqlCommand("Update Students" +
                    " Set ID = @ID where FIO = @FIO", conn))
            {
                /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
                  кол-во ошибок и достичь большего быстродействия
                  но требует и больших усилий в написании кода*/
                //объявляем объект класса SqlParameter
                SqlParameter param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@ID";
                //задаем значение параметра
                param.Value = 100;
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Int;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
                //переопределяем объект класса SqlParameter
                param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@FIO";
                //задаем значение параметра
                param.Value = "Иванов Иван";
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Text;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
 
                Console.WriteLine("Изменяем запись(и)");
                {
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch
                    {
                        Console.WriteLine("Ошибка, при выполнении запроса на изменение записи(ей)");
 
                        return;
                    }
                }
            }
        }
        private static void ShowFields(SqlConnection conn)
        {
            //Выводим значение на экран
            using (SqlCommand cmd = new SqlCommand("Select * From Students", conn))
            {
                /*Метод ExecuteReader() класса SqlCommand возврашает
                 объект типа SqlDataReader, с помошью которого мы можем
                 прочитать все строки, возврашенные в результате выполнения запроса
                 CommandBehavior.CloseConnection - закрываем соединение после запроса
                 */
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    //цикл по всем столбцам полученной в результате запроса таблицы
                    for (int i = 0; i < dr.FieldCount; i++)
                        /*метод GetName() класса SqlDataReader позволяет получить имя столбца
                         по номеру, который передается в качестве параметра, данному методу
                         и озночает номер столбца в таблице(начинается с 0)
                         */
                        Console.Write("{0}\t", dr.GetName(i).ToString().Trim());
                    /*читаем данные из таблицы
                     чтение происходит только в прямом направлении
                     все прочитаные строки отбрасываюся */
                    Console.WriteLine();
                    while (dr.Read())
                    {
                        /*метод GetValue() класса SqlDataReader позволяет получить значение столбца
                                                по номеру, который передается в качестве параметра, данному методу
                                                и озночает номер столбца в таблице(начинается с 0)
                                                */
                        Console.WriteLine("{0}\t{1}\t{2}", dr.GetValue(0).ToString().Trim(),
                         dr.GetValue(1).ToString().Trim(),
                         dr.GetValue(2).ToString().Trim());
                    }
                }
            }
        }
        private static void CreateNewTable(SqlConnection conn)
        {
            using (SqlCommand cmdCreateTable = new SqlCommand("CREATE TABLE " +
         " Students (ID int not null" +
         ", FIO char(60) not null," +
         "  Grupa char(20) not null)", conn))
            {
             
                //посылаем запрос
                try
                {
                    cmdCreateTable.ExecuteNonQuery();
                }
                catch
                {
                    Console.WriteLine("Ошибка при создании таблицы");
                    return;
                }
            }
 
            Console.WriteLine("Таблица создана успешно");
        }
        private static void InsertToTable(SqlConnection conn)
        {
            using (SqlCommand cmd = new SqlCommand("Insert into Students" +
                "(ID,FIO,Grupa) Values (@ID,@FIO,@Grupa)", conn))
            {
                /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
                кол-во ошибок и достичь большего быстродействия
                 но требует и больших усилий в написании кода*/
                //объявляем объект класса SqlParameter
                SqlParameter param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@ID";
                //задаем значение параметра
                param.Value = 10;
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Int;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
                //переопределяем объект класса SqlParameter
                param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@FIO";
                //задаем значение параметра
                param.Value = "Иванов Иван Иванович";
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Text;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
                //переопределяем объект класса SqlParameter
                param = new SqlParameter();
                //задаем имя параметра
                param.ParameterName = "@Grupa";
                //задаем значение параметра
                param.Value = "4-2";
                //задаем тип параметра
                param.SqlDbType = SqlDbType.Text;
                //передаем параметр объекту класса SqlCommand
                cmd.Parameters.Add(param);
 
                Console.WriteLine("Вставляем запись");
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch
                {
                    Console.WriteLine("Ошибка, при выполнении запроса на добавление записи");
                    return;
                }
            }
 
        }
 
    }
}
3. Заключение

В заключении хочу сказать, что в данном FAQ была рассмотрена лиш малая часть общирного мира ADO .NET. Посмотрите на изображение и увидите, что еще осталось не освященным.

Вложение 42297

Дополнительные материалы:

http://msdn.microsoft.com/ru-ru/library/27y4ybxw.aspx
http://msdn.microsoft.com/ru-ru/library/bb397942.aspx
http://msdn.microsoft.com/ru-ru/libr...onnection.aspx
http://msdn.microsoft.com/ru-ru/libr...qlcommand.aspx
http://msdn.microsoft.com/ru-ru/libr...atareader.aspx

Данный FAQ в doc(MS Word)
Вложение 42225
Миниатюры
Работа с подключенным уровнем ADO .NET в C#  
Вложения
Тип файла: rar FAQ для раздела ADO .NET.rar (25.6 Кб, 1535 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2010, 14:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с подключенным уровнем ADO .NET в C# (C#):

работа с SQL БД в ADO.NET с нуля, используем C# - C#
Привет всем) У меня такая проблема, я создал SQL базу данных, теперь мне необходимо написать код для поключения к етой базе и отображения...

MS Access Работа с базой данных Access через ADO.NET - C#
Учусь работать с базой данных Access через ADO.NET. Попробовал поработать с помощью мастеров - не понравилось, очень много непонятного...

Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net - C#
Всем привет! Нужно написать клиент-серверное приложение на основе Microsoft Sql Server 2005 Express Edition. Некое клиент-серверное...

Отличия ADO.NET'03 и ADO.NET'05 - C#
Друзья, есть ли отличия в технологии ADO.NET для 2003 и для 2005, и насколько они велики? Вопрос вот почему, имеет ли смысл, в случае...

Что лучше: работа с Access через ADO.NET или силами самого Access? - C#
Считаю, что лучше работать с регулярно поступающим в Access объемом данных, разработав приложение Windows Forms C# и управляя процессом...

ado.net в vs 2008 - C#
Я так понял использовать asp.net ado.net в vs 2008 не получиться ?подскажите? если можно так плиз помогите как а то соединение типа не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Rockedit
Автор FAQ
Автор FAQ
1756 / 562 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
29.09.2010, 11:02  [ТС] #2
Пример вызова хранимых процедур SQL Server


Предположим, что в созданной ранее нами БД, есть хранимая процедура по имени "GetStudents"
SQL
1
2
3
4
5
CREATE PROCEDURE GetStudents
   @ID INT,
   @fio VARCHAR(50) output
AS
    SELECT @fio = FIO FROM Test WHERE ID = @ID
Тогда вызывать её можно следующим образом.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Data.SqlClient;
using System.Data;
 
namespace Students
{
 
    class Program
    {
        static void Main(string[] args)
        {
            /*Объявляем строковую переменную и записываем в нее
             строку подключения 
             Data Source - имя сервера, по стандарту (local)\SQLEXPRESS
             Initial Catalog - имя БД 
             Integrated Security=-параметры безопасности
             Мое подключение имеет вид
             */
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=Test;
                            Integrated Security=True";
            /*Здесь указал имя БД(хотя для создания БД его указывать не нужно)
              для того, чтобы проверить, может данная БД уже создана
            Создаем экземпляр класса  SqlConnection по имени conn
            и передаем конструктору этого класса, строку подключения
             */
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                Console.WriteLine("Ошибка подключения:{0}", se.Message);
                return;
            }
            Console.WriteLine("Соедение успешно произведено");
           /*Создаем экземпляр класса  SqlCommand по имени cm
             и передаем конструктору этого класса, имя хранимой процедуры
             и объект типа SqlConnection
            */
            using(SqlCommand cm = new SqlCommand("GetStudents",cn)){
               //информируем, о том, что это хранимая процедура
                cm.CommandType = CommandType.StoredProcedure;
                /*добавляем параметры, о чем было сказано ранее
                *единственное, что нового - это param.Direction
                *который указывает тип параметров - входные и выходные*/
                SqlParameter param = new SqlParameter();
                param.ParameterName = "@ID";
                param.Direction = ParameterDirection.Input; 
                param.SqlDbType = SqlDbType.TinyInt;
                //ID , который ищем
                param.Value = 1;
                cm.Parameters.Add(param);
                param = new SqlParameter();
                param.ParameterName = "@fio";
                param.Direction = ParameterDirection.Output;
                param.SqlDbType = SqlDbType.VarChar;
                param.Size = 50;
                cm.Parameters.Add(param);
                //выполняем хранимую процедуру
                cm.ExecuteNonQuery();
                 //выводим результат
                Console.WriteLine(cm.Parameters["@fio"].Value);
         }
        }
 
    }
}
Rockedit
Автор FAQ
Автор FAQ
1756 / 562 / 9
Регистрация: 22.12.2009
Сообщений: 1,544
20.10.2010, 22:42  [ТС] #3
Пример получения списка доступных MS SQL серверов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Data.Sql;
using System;
class Program
{
    static void Main()
    {
        SqlDataSourceEnumerator instance =
          SqlDataSourceEnumerator.Instance;
        System.Data.DataTable table = instance.GetDataSources();
 
        //Вывод таблицы со свединиями о доступных серверах.
        DisplayData(table);
 
        Console.WriteLine("Press any key to continue.");
        Console.ReadKey();
    }
 
    private static void DisplayData(System.Data.DataTable table)
    {
        foreach (System.Data.DataRow row in table.Rows)
        {
            foreach (System.Data.DataColumn col in table.Columns)
            {
                Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
            }
            Console.WriteLine("============================");
        }
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2010, 22:42
Привет! Вот еще темы с ответами:

Потокобезопасность ADO.net - C#
Здравствуйте! Пишу приложение-сервер, на котором клиенты будут вызывать методы через WCF. Эти методы будут выполнять команды SQL для базы...

Книги по ADO .NET(C#) - C#
Здравствуйте! Может кто подсказать хорошую книгу по ADO .NET на русском языке, желательно как можно новее. Какая версия ADO .NET на данный...

библиотека ado.net - C#
Вобщем такая задача: есть две таблицы в MySQL: 1 - &quot;Товар&quot; (ИД, название, цена товара), 2 - &quot;Категория&quot; (ИД_товара, название). Нужно с...

Классический ado.net - C#
В каких проектах сейчас используются executescalar и executenonquery? Какие нужды они удовлетворяют?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru