Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/28: Рейтинг темы: голосов - 28, средняя оценка - 4.71
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
1

Добавление данных в таблицу и удаление данных из таблицы

02.02.2011, 22:02. Просмотров 5282. Ответов 21
Метки нет (Все метки)

Всем доброго время суток. Столкнулся с такой проблемой нужно написать программу с помощью которой можно добавлять данные в таблицу и удалять данные. В качестве примера используется та же злосчастная база TestDB с таблицей Books.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
 
namespace InsertData
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connectionString = GetConnectionString();
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    
                    using (SqlCommand cmd = new SqlCommand("INSERT INTO Books (Title, PublishYear) VALUES (@Title, @PublishYear)", conn))
                    {
                        cmd.Parameters.Add(new SqlParameter("@Title", "Test Book"));
                        cmd.Parameters.Add(new SqlParameter("@PublishYear", "2010"));
 
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affected by insert", rowsAffected);
                    }
                   
                    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                        }
                    }
                    
                    using (SqlCommand cmd = new SqlCommand("DELETE FROM Books WHERE Title LIKE '%Test%'", conn))
                    {
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affect by delete", rowsAffected);
                    }
                    
                    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                Console.Write(ex);
            }
            Console.ReadKey();
        }
 
        
        private static string GetConnectionString()
        {
            return @"Data Source=DNAPC\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True";
        }
    }
}
При запуске программы возникает ошибка исключения (рис.ErrorException), программа ругается что в колонке BookID значение "null"- пустое значение, а это не допустимо. Как заставить программу вводить данные в таблицу и удалять их????? Помогите!!!! 8 час сижу!!!!
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 22:02
Ответы с готовыми решениями:

Добавление и удаление данных из таблицы
Здравствуйте.Недавно начал изучать ADO.NET, написал программу, как сделать чтобы можно было...

Добавление данных через форму в таблицу базы данных MS SQL
Здравствуйте! Я делаю форму для добавления записи в таблицу базы данных, созданную в MS SQL...

Как сделать динамическое добавление данных из таблицы одной формы в таблицу другой формы
Здравствуйте! Подскажите, пожалуйста, как сделать динамическое добавление данных из таблицы одной...

Добавление, изменение и удаление данных в базе данных
Методом научного тыка кое как подключил таблицу Microsoft Access с помощью datagrid вот только ни...

Добавление данных в таблицу базы данных
Есть 2 таблицы группы и сотрудники, таблица группы содержит столбцы group_number, dateofformation,...

21
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
03.02.2011, 09:27 2
Во первых, попробуй в БД поле BookID поставить int not Null, и Autoincrement 1,1. Autoincrement - это автонаращивание значений поля. Этим самым ты никогда не получишь BookID = Null.
И вот еще, я добавляю данные следующим образом:
C#
1
2
3
4
5
myCommand.Parameters.Add("Fax", SqlDbType.Bit, dr["Fax"].ToString().Length).Value = dr["Fax"];
myCommand.CommandText = "Insert Phones (PhonesID, AddressID, ContactID, Phone, Fax, OwnID) Values (" + dr["PhonesID"].ToString() + ", " + dr["AddressID"].ToString() + ", " + dr["ContactID"].ToString() + ", \'" + dr["Phone"].ToString() + "\', @Fax, " + dr["OwnID"].ToString() + ")";
myCommand.ExecuteNonQuery();
myCommand.Parameters.Clear();
 //  dr["Phone"].ToString()  -  это строковый тип поля, следовательно он берется в одинарные ковычки
Через параметр я добавляю данные всех типов, кроме, числового (int), и строкового, остальные стараюсь через параметр, но их у меня мало.

Добавлено через 1 час 21 минуту
Да, ты же еще спрашивал про удаление. Удаление выполняетчся так же SQL командой
C#
1
2
myCommand.CommandText = "Delete from Phones where PhonesID = " + dr["PhonesID"].ToString();
myCommand.ExecuteNonQuery();
А так, у тебя вроде удаление правильно написано.
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
03.02.2011, 13:07  [ТС] 3
Алексей86 спасибо за ответ, но не понял, где можно в БД поле BookID поставить значения int not Null, и Autoincrement 1,1. У меня когда я открываю базу TestDB с таблицей Books и встаю в колонку Data Type для поля BookID появляется ниспадающий список (рис.Books.Table.png), в котором только можно выбрать тип значения переменной. В свойствах Column Properties значение Data Type только int, значение Condensed Data Type только int????? И еще вопрос:

C#
1
2
3
4
myCommand.Parameters.Add("Fax", SqlDbType.Bit, dr["Fax"].ToString().Length).Value = dr["Fax"];
myCommand.CommandText = "Insert Phones (PhonesID, AddressID, ContactID, Phone, Fax, OwnID) Values (" + dr["PhonesID"].ToString() + ", " + dr["AddressID"].ToString() + ", " + dr["ContactID"].ToString() + ", \'" + dr["Phone"].ToString() + "\', @Fax, " + dr["OwnID"].ToString() + ")";
myCommand.ExecuteNonQuery();
myCommand.Parameters.Clear();
Вместо каких строк надо вставлять????? Заранее огоромное спасибо!!!!!
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы  
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
03.02.2011, 13:41 4
int и Not Null у тебя уже стоит, а Autoincrement ставится в списке как на картинке, в поле Identity Specification поставь Yes, и твой первый запрос будет работать.

Добавлено через 4 минуты
Цитата Сообщение от isaak Посмотреть сообщение
C#
1
2
3
4
myCommand.Parameters.Add("Fax", SqlDbType.Bit, dr["Fax"].ToString().Length).Value = dr["Fax"];
myCommand.CommandText = "Insert Phones (PhonesID, AddressID, ContactID, Phone, Fax, OwnID) Values (" + dr["PhonesID"].ToString() + ", " + dr["AddressID"].ToString() + ", " + dr["ContactID"].ToString() + ", \'" + dr["Phone"].ToString() + "\', @Fax, " + dr["OwnID"].ToString() + ")";
myCommand.ExecuteNonQuery();
myCommand.Parameters.Clear();
Это тебе не нужно, я тебе просто показал как можно добавить параметр в SQL запрос. И как можно обойтись без них. Ведь это все строки кода, и код раздувается большим. Да, при каждом добавлении параметра, очищай лист параметров с помощью
C#
1
myCommand.Parameters.Clear()
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
03.02.2011, 14:35  [ТС] 5
Алексей86 спасибо за ответ, я сделал, как ты советуешь в поле Identity Specification поставил Yes (рис.IndentifySpecification.png), но у меня опять выскакивает ошибка исключения, что опять не правильно???? И еще вопрос куда нужно вставить команду для очищения листа параметров:
C#
1
myCommand.Parameters.Clear()
Заранее огоромное спасибо!!!!!
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы  
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
04.02.2011, 08:22 6
Цитата Сообщение от isaak Посмотреть сообщение
C#
1
2
3
4
5
6
7
using (SqlCommand cmd = new SqlCommand("INSERT INTO Books (Title, PublishYear) VALUES (@Title, @PublishYear)", conn))
 {
 cmd.Parameters.Add(new SqlParameter("@Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("@PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
Этот блок я бы записал так, но это почти тоже самое:

C#
1
2
3
4
5
6
7
8
 using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@Title, @PublishYear)", conn))
 {
cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
У меня в таком виде работает, как у тебя не знаю. И в какой строке он дает исключение, может вовсе не в добавлении?
1
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
04.02.2011, 12:48  [ТС] 7
Алексей86 спасибо за ответ, я заменил блок кода:
C#
1
2
3
4
5
6
7
using (SqlCommand cmd = new SqlCommand("INSERT INTO Books (Title, PublishYear) VALUES (@Title, @PublishYear)", conn))
 {
 cmd.Parameters.Add(new SqlParameter("@Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("@PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
на который ты советуешь:

C#
1
2
3
4
5
6
7
8
using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@Title, @PublishYear)", conn))
 {
cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
но у меня опять выскакивает ошибка исключения (рис.ErrorException), программа ссылается на строку номер 25:
C#
1
catch (SqlException ex)
Че то я вообще ничего не понимаю, я указал правильно строку соединения Connection String с базой данных:
C#
1
return @"Data Source=DNAPC\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True";
в БД поле BookID у меня стоит только int, в поле Identity Specification поставил Yes, БД у меня подключена, почему же тогда выскакивает исключение:
C#
1
catch (SqlException ex)
может здесь, что-нибудь надо поменять - рис.Query.png?????Что опять не правильно????? Помогите пожалуйста кто-нибудь уже 3 сутки долблюсь!!!!
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы   Добавление данных в таблицу и удаление данных из таблицы  
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
04.02.2011, 13:21  [ТС] 8
УРАААААА!!!!!!! ВСЕ ЗАРАБОТАЛЛЛЛЛЛОООО!!!!!!!!!!!!! Спасибо Алексей86!!!!!!
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
04.02.2011, 14:03  [ТС] 9
Все работает, но программа не правильно вводит значения в поле BookID, то есть после 3 сразу же идет 10, 11, 13 (рис.Result.png). Вот код я его немножко изменил:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
 
namespace InsertData
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connectionString = GetConnectionString();
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
 
                    using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@Title, @PublishYear)", conn))
                    {
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
                        cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
                        
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new SqlParameter("Title", "C# for beginner"));
                        cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
 
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affected by insert", rowsAffected);
                    }
                   
                    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                        }
                    }
                    
                   using (SqlCommand cmd = new SqlCommand("DELETE FROM Books WHERE Title LIKE '%Test%'", conn))
                    {
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affect by delete", rowsAffected);
                    }
                    
                    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                Console.Write(ex);
            }
            Console.ReadKey();
        }
 
        
        private static string GetConnectionString()
        {
            return @"Data Source=DNAPC\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True";
        }
    }
}
Подскажите пожалуйста где ошибка за ранее огромное спасибо!!!!!!
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы  
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
04.02.2011, 14:41 10
Цитата Сообщение от isaak Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@Title, @PublishYear)", conn))
 {
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "C# for beginner"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
для того что бы у тебя обе книги заносились необходимо добавлять строку одну, ну или две, по твоему усмотрению. Получится вот что:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@Title, @PublishYear)", conn))
 {
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();  // эта строка как бы логически завершает SQL комманду, и дает е на выполнение.
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "C# for beginner"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
Также, можно заменять значения параметров, например так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@Title, @PublishYear)", conn))
 {
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
  // cmd.ExecuteNonQuery() - эта строка как бы логически завершает SQL комманду, и дает ее на выполнение серверу.
 Console.WriteLine("{0} rows affected by insert", cmd.ExecuteNonQuery());
 
 cmd.Parameters["Title"].Value = "C# for beginner";
 cmd.Parameters["PublishYear"].Value = "2010";
 Console.WriteLine("{0} rows affected by insert", cmd.ExecuteNonQuery());
 }
а значения BookID - формируются автоматически, т.к. ты задавал свойство - Yes, помнишь. Если хочешь что бы были попорядку, тебе придется отключить это свойство, и тогда у тебя запрос измениться на:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@BookID, @Title, @PublishYear)", conn))
 {
 cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("BookID", "1"));
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
int rowsAffected = cmd.ExecuteNonQuery();  // эта строка как бы логически завершает SQL комманду, и дает е на выполнение.
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("BookID", "2"));
cmd.Parameters.Add(new SqlParameter("Title", "C# for beginner"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
1
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
04.02.2011, 16:01  [ТС] 11
Спасибо Алексей86, все прекрасно работает , но у меня остался один вопрос: почему программа выводит 2 раза строки №2 и №3 это видно на рисунке:
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы  
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
05.02.2011, 13:46 12
ну значит они у тебя в БД добавлены по два раза. Сделай полную очистку БД, либо удали по строчно. Для полной очистке тебе необходимо написать:

C#
1
2
3
4
5
             using (SqlCommand cmd = new SqlCommand("DELETE FROM Books ", conn))
                    {
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affect by delete", rowsAffected)
                    }
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
05.02.2011, 16:51  [ТС] 13
Спасибо Алексей86, все прекрасно работает, но у меня возникает следующий вопрос: программа выводит все строки: №1, №2, №3, №4 (рис.Result), но в таблицу записываются значения только №2, №3, №4 (рис.BooksTable). Заранее огромное спасибо.
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы   Добавление данных в таблицу и удаление данных из таблицы  
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
05.02.2011, 17:20  [ТС] 14
Я заново создал таблицу и сделал полную очистку БД:
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
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
 
namespace InsertData
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connectionString = GetConnectionString();
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
 
                    using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@BookID, @Title, @PublishYear)", conn))
                    {
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new SqlParameter("BookID", "1"));
                        cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
                        cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
                        int rowsAffected = cmd.ExecuteNonQuery();  // эта строка как бы логически завершает SQL комманду, и дает е на выполнение.
                        Console.WriteLine("{0} rows affected by insert", rowsAffected);
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new SqlParameter("BookID", "2"));
                        cmd.Parameters.Add(new SqlParameter("Title", "C# for beginner"));
                        cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
                        rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affected by insert", rowsAffected);
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new SqlParameter("BookID", "3"));
                        cmd.Parameters.Add(new SqlParameter("Title", "C++ for beginner"));
                        cmd.Parameters.Add(new SqlParameter("PublishYear", "2011"));
                        rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affected by insert", rowsAffected);
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new SqlParameter("BookID", "4"));
                        cmd.Parameters.Add(new SqlParameter("Title", "Teach Yourself C++"));
                        cmd.Parameters.Add(new SqlParameter("PublishYear", "2011"));
                        rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affected by insert", rowsAffected);
                    }
 
                    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                        }
                    }
 
                   using (SqlCommand cmd = new SqlCommand("DELETE FROM Books ", conn))
                    {
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Console.WriteLine("{0} rows affect by delete", rowsAffected);
                    }
 
                    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                Console.Write(ex);
            }
            Console.ReadKey();
        }
 
 
        private static string GetConnectionString()
        {
            return @"Data Source=DNAPC\SQLEXPRESS;Initial Catalog=TestDB2;Integrated Security=True;Pooling=False";
        }
    }
}
Программа выводит все строки: №1, №2, №3, №4 (рис.Result), но таблица остается пустой (рис.BooksTable). Где опять ошибка????
Заранее огромное спасибо.
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы   Добавление данных в таблицу и удаление данных из таблицы  
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
07.02.2011, 11:40 15
Смотри свои действия попорядку:
1. Ты добавляешь данные, здесь все правильно
Цитата Сообщение от isaak Посмотреть сообщение
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
using (SqlCommand cmd = new SqlCommand("INSERT Books VALUES (@BookID, @Title, @PublishYear)", conn))
 {
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("BookID", "1"));
 cmd.Parameters.Add(new SqlParameter("Title", "Test Book"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
 int rowsAffected = cmd.ExecuteNonQuery(); // эта строка как бы логически завершает SQL комманду, и дает е на выполнение.
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("BookID", "2"));
 cmd.Parameters.Add(new SqlParameter("Title", "C# for beginner"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2010"));
 rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("BookID", "3"));
 cmd.Parameters.Add(new SqlParameter("Title", "C++ for beginner"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2011"));
 rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 cmd.Parameters.Clear();
 cmd.Parameters.Add(new SqlParameter("BookID", "4"));
 cmd.Parameters.Add(new SqlParameter("Title", "Teach Yourself C++"));
 cmd.Parameters.Add(new SqlParameter("PublishYear", "2011"));
 rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affected by insert", rowsAffected);
 }
2. Ты их выводишь, тут тоже все впорядке.
Цитата Сообщение от isaak Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
 using (SqlDataReader reader = cmd.ExecuteReader())
 {
 while (reader.Read())
 {
 Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
 }
 }
3. Ты их удаляешь из таблицы. Вот эти строки очищают таблицу полностью
Цитата Сообщение от isaak Посмотреть сообщение
C#
1
2
3
4
5
using (SqlCommand cmd = new SqlCommand("DELETE FROM Books ", conn))
 {
 int rowsAffected = cmd.ExecuteNonQuery();
 Console.WriteLine("{0} rows affect by delete", rowsAffected);
 }
Т.е. тебе либо надо поменять 3 на 1, 1 на 2 действие. т.е. 3-1-2. Либо вообще убрать 3 блок, но тогда у тебя не будет очищаться таблица
1
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
07.02.2011, 13:12  [ТС] 16
Спасибо Алексей86 все заработало, сейчас бьюсь над следующей задачей: нужно выполнить в данной БД хранимую процедуру. Для этого в БД SQL Server нужно подготовить простенькую процедуру, возвращающую список книг, упорядоченных по году издания. Я добавил новую хранимую процедуру с помощью функции Add New StoredProcedure (рис.Add New StoredProcedure) и добавил код процедуры:

ALTER PROCEDURE dbo.GetSortedBooks

AS
SELECT * FROM Books ORDER BY PublishYear
RETURN

При сохранение данной процедуры у меня выскакивает ошибка: "Операция не может быть завершена." (рис.New StoredProcedure). Что можно сделать???? Заранее огромное спасибо.
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы   Добавление данных в таблицу и удаление данных из таблицы  
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
07.02.2011, 13:33  [ТС] 17
Вот код программы RunStoredProc
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
 
namespace RunStoredProc
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connectionString = GetConnectionString();
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    //Не забывайте передать команде объект-соединение
                    using (SqlCommand cmd = new SqlCommand("GetSortedBooks", conn))
                    {
                        //Указываем тип команды, чтобы объект-команда интерпретировал
                        //текст запроса как хранимую процедуру
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            //SqlDataReader считывает по одной строке из базы данных
                            //по мере того, как вы их запрашиваете
                            while (reader.Read())
                            {
                                Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetInt32(2));
                            }
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                Console.Write(ex);
            }
            Console.ReadKey();
        }
 
        
        static string GetConnectionString()
        {
           
            return @"Data Source=DNAPC\SQLEXPRESS;Initial Catalog=TestDB2;Integrated Security=True;Pooling=False";
        }
    }
}
Заранее огромное спасибо.
0
Алексей86
25 / 18 / 4
Регистрация: 05.04.2010
Сообщений: 85
07.02.2011, 14:16 18
за место твоего
Цитата Сообщение от isaak Посмотреть сообщение
ALTER PROCEDURE dbo.GetSortedBooks
AS
SELECT * FROM Books ORDER BY PublishYear
RETURN
попробуй
SQL
1
2
3
4
CREATE PROCEDURE dbo.GetSortedBooks
AS
SELECT * FROM Books ORDER BY PublishYear
RETURN
1
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
07.02.2011, 16:11  [ТС] 19
Спасибо Алексей86 все заработало!!!!!!
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 763
07.02.2011, 22:42  [ТС] 20
Еще один вопрос связывание данных по технологии ASP.NET, создается проект DataBindingWeb, я создавал с помощью ASP.NET Web Application (рис. ASP.NET Web Application), у меня в Solution Explorer сразу же появились два файла Global.asax и SiteMaster. Я не знаю нужны ли они вообще?
Код файла Default.aspx.cs:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
 
namespace DataBindingWeb
{
    public partial class _Default : System.Web.UI.Page
    {
        private DataSet _dataSet;
 
        protected void Page_Load(object sender, EventArgs e)
        {
            _dataSet = CreateDataSet();
            GridView1.DataSource = _dataSet.Tables["Books"];
            GridView1.DataBind();
        }
 
        private DataSet CreateDataSet()
        {
            string connectionString = @"Data source=BEN-DESKTOP\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=SSPI";
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM Books", conn))
                using (SqlDataAdapter adapter = new SqlDataAdapter())
                {
                    adapter.TableMappings.Add("Table", "Books");
                    adapter.SelectCommand = cmd;
                    DataSet dataSet = new DataSet("Books");
                    adapter.Fill(dataSet);
                    return dataSet;
                }
            }
        }
    }
}
Код файла Default.aspx.:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DataBindingWeb._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    Database Results:
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
    </div>
    </form>
</body>
</html>
Код файла Web.config:
XML
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
<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
    <compilation debug="true" targetFrameworkMoniker=".NETFramework,Version=v4.0">
      <assemblies>
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
    <authentication mode="Windows"/>
    <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.
 
        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
    </pages>
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <providerOption name="CompilerVersion" value="v4.0"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>
  <!-- 
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ScriptModule"/>
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <remove name="ScriptHandlerFactory"/>
      <remove name="ScriptHandlerFactoryAppServices"/>
      <remove name="ScriptResource"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </handlers>
  </system.webServer>
</configuration>
При компиляции у меня выскакивают предупреждения (рис.ErrorList), что то связанное с файлом targetFrameworkMoniker' attribute is not allowed. Я не знаю что это такое вообще???? При запуске программы выскакивает страница с ошибкой (рис.ErrorExceptionPage). В чем ошибка не понимаю????
Помогите пожалуйста кто-нибудь за ранее огромное спасибо!!!!!
0
Миниатюры
Добавление данных в таблицу и удаление данных из таблицы   Добавление данных в таблицу и удаление данных из таблицы   Добавление данных в таблицу и удаление данных из таблицы  

Добавление данных в таблицу и удаление данных из таблицы  
07.02.2011, 22:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2011, 22:42

Добавление данных в таблицу
Вот создаю базу данных (SQL Server Compact Edition) и таблицу: private void...

Добавление данных в таблицу
Ребят, чет я намудрил с запросом и не могу добавить данные в таблицу, подскажите как правильно это...

Кнопка добавление данных в таблицу
Хочу что бы по нажатию кнопки все что я добавил в таблицу сохранилось, а как это сделать не понимаю


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

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

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