Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2014, 22:01   #1
Salem23
Пользователь
 
Регистрация: 17.07.2014
Сообщений: 11
По умолчанию Работа с БД.С#

Здравствуйте,подскажите пожалуйста правильно ли я делаю сравнение с переменной(name) при обращении в БД ?Или как это еще по-другому можно сделать?

Код:
 string  name = textBox1.Text; //ввод продукта пользователем

                string dbLocation =
                          System.IO.Path.GetFullPath("C:\\Users\\Oleg\\Documents\\Visual Studio 2013\\Projects\\WindowsFormsApplication4\\WindowsFormsApplication4\\Database1.mdf");

                SqlConnection connection1 = new SqlConnection
                                (@"data source=.\SQLEXPRESS;" +
                                "User Instance=true;Integrated Security=SSPI;AttachDBFilename="
                                + @dbLocation);
                connection1.Open();
                string sql = "SELECT * FROM Spisok WHERE produc";
                SqlCommand command1 = new SqlCommand(sql, connection1);
                SqlDataReader dataReader1 = command1.ExecuteReader();
               
                while (dataReader1.Read())
                {
                    textBox7.Text = textBox7.Text + dataReader1["product"] + "\n";
                }
                }
Salem23 вне форума Ответить с цитированием
Старый 18.07.2014, 02:19   #2
FreeZon
Пользователь
 
Регистрация: 10.01.2014
Сообщений: 33
По умолчанию

Да все верно молодец =)
FreeZon вне форума Ответить с цитированием
Старый 18.07.2014, 06:58   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Цитата:
Сообщение от FreeZon Посмотреть сообщение
Да все верно молодец =)
[OFF]Мда... Вы бы товарищ, делом занялись, а то и сами по любому пустяку плодите темы и флуд, вместо того, чтобы книги читать, так ещё и воду мутите.[/OFF]

Цитата:
Сообщение от Salem23 Посмотреть сообщение
сравнение с переменной(name) при обращении в БД
Это что такое ? В БД нет переменных. Возможно, Вы имеете ввиду _одно_ поле в _одной_ строке _одной_ таблицы в БД ?
Не зная, что Вам нужно, сложно сказать (почти невозможно, без навыков телепатии), что Вам стоит изменять в коде.
Цитата:
Сообщение от Salem23 Посмотреть сообщение
правильно ли я делаю сравнение с переменной(name)
Код:
 string  name = textBox1.Text; //ввод продукта пользователем
Ну завели Вы name, о каком сравнении вообще может идти речь, если больше в коде нигде эта nаme не фигурирует ?
Коннекшн на беглый взгляд корректный.
Код:
"SELECT * FROM Spisok WHERE produc";
А вот это уже конкретно неверно (что бы там товарищ Freezon не говорил). Предикат запроса (часть в WHERE) должно образовать логическое выражение, чаще всего, это результат сравнения с чем либо, в этом же месте запроса. Если Вы про такое сравнение имеете ввиду в Вашем вопросе, то запрос не дописан, и дописать можно несколькими способами, самый простой из которых это
Код:
"SELECT * FROM Spisok WHERE produc = '" + name + "'";
Но это будет не совсем сравнение, а фильтрация выборки, т.е. в итоговый набор данных попадут строки, удовлетворяющие предикату.
Ну и последнее, чего планировали добиться циклом ?
Код:
textBox7.Text = textBox7.Text + dataReader1["product"] + "\n";
Внести в список записи об имени продукта столько раз сколько из есть в таблице ? Даже если всё правильно напишете (по моим указаниям или ещё как), даже если пофиксите produc на product , то всё, что Вы увидите в списке это стройную стенку из текста, запомненного во всё том же name, Вы так хотели ? Если только ради этого, то способ выбран замудрёный, проще запросить из базы количество записей обычным SELECT COUNT(…)
phomm вне форума Ответить с цитированием
Старый 18.07.2014, 09:16   #4
Salem23
Пользователь
 
Регистрация: 17.07.2014
Сообщений: 11
По умолчанию

Извините, не тот код скопипастил.
Разве нельзя использовать таким образом
Код:
"SELECT * FROM Spisok WHERE product";
если нужно вывести в текс бокс значения столбца таблицы бд?

Вот сам код:
Код:
 name = textBox1.Text; //ввод продукта пользователем
               
                string dbLocation =
                          System.IO.Path.GetFullPath("C:\\Users\\Oleg\\Documents\\Visual Studio 2013\\Projects\\WindowsFormsApplication4\\WindowsFormsApplication4\\Database1.mdf");
                
                SqlConnection connection1 = new SqlConnection
                                (@"data source=.\SQLEXPRESS;" +
                                "User Instance=true;Integrated Security=SSPI;AttachDBFilename="
                                + @dbLocation);
                connection1.Open();
                string sql = "SELECT * FROM Spisok WHERE product = '" + name +"'";
                 
                SqlCommand command1 = new SqlCommand(sql, connection1);
                SqlDataReader dataReader1 = command1.ExecuteReader();
 
                while (dataReader1.Read())
                {
                    Text2.Text = Text2.Text  + dataReader1["product"] + "\n";
                }
 
 
                dataReader1.Close();
                connection1.Close();
В коде который я ошибочно скинул,в текс боксе передаются все значения из строчки product. в данном коде значение не передается,если фильтрация написана правильно,то тогда проблема в цикле while?
Salem23 вне форума Ответить с цитированием
Старый 18.07.2014, 11:23   #5
Salem23
Пользователь
 
Регистрация: 17.07.2014
Сообщений: 11
По умолчанию

И если я правильно понимаю SELECT COUNT(…) возвращает значение типа int?
Salem23 вне форума Ответить с цитированием
Старый 19.07.2014, 15:11   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Цитата:
если нужно вывести в текс бокс значения столбца таблицы бд?
У столбца таблицы нет значений. Значения есть у полей строк таблицы .
Конкретно в случае SELECT * у Вас будут выбраны все поля, а Вы, как я понимаю, хотите одно какое-то.
Вот второй код, что Вы привели имеет больше шансов быть корректным, но это надо проверять, и при необходимости, отлаживать.

Select Count возвращает не значение типа инт. Любой запрос (селект) возвращает набор данных. В этом наборе данных может быть некоторое количество строк, состоящих из некоторого количества полей. В случае с SELECT COUNT набор будет состоять из одной строки с одним полем (без имени, если не присвоите алиас данному полю). Чтобы добраться до именно числа строк в виде числа типа int надо взять из набора данных нужную строку (установить позицию чтения на неё), и обратиться к нужному полю (но померу или по имени) и преобразовать значение в инт.

В остальном, я Вас не понял, Вы ничего толком не объяснили, а просто на своей волне.
phomm вне форума Ответить с цитированием
Старый 22.07.2014, 00:39   #7
Salem23
Пользователь
 
Регистрация: 17.07.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
У столбца таблицы нет значений. Значения есть у полей строк таблицы .
Конкретно в случае SELECT * у Вас будут выбраны все поля, а Вы, как я понимаю, хотите одно какое-то.
Вот второй код, что Вы привели имеет больше шансов быть корректным, но это надо проверять, и при необходимости, отлаживать.

Select Count возвращает не значение типа инт. Любой запрос (селект) возвращает набор данных. В этом наборе данных может быть некоторое количество строк, состоящих из некоторого количества полей. В случае с SELECT COUNT набор будет состоять из одной строки с одним полем (без имени, если не присвоите алиас данному полю). Чтобы добраться до именно числа строк в виде числа типа int надо взять из набора данных нужную строку (установить позицию чтения на неё), и обратиться к нужному полю (но померу или по имени) и преобразовать значение в инт.

В остальном, я Вас не понял, Вы ничего толком не объяснили, а просто на своей волне.
Здравствуйте,первый код я скинул ошибочно.Давайте, с самого начало: есть БД с таблицей со столбцами product,kol-vo,mesto. Пользователь выполняет ввод наименования продукта
Код:
name = textBox1.Text;
Мне нужно в столбце product выполнить фильтрацию по данному единичному продукту.
Код:
string sql = "SELECT * FROM Spisok WHERE product = '" + name +"'";
и вывести это в richtextbox. без ввода и фильтрации по переменной name все работает.
Salem23 вне форума Ответить с цитированием
Старый 22.07.2014, 01:53   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас name это один в один имя продукта? или часть? или отличается по регистру?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.07.2014, 11:45   #9
Salem23
Пользователь
 
Регистрация: 17.07.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у вас name это один в один имя продукта? или часть? или отличается по регистру?
один в один
Salem23 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с псевдослучайными последовательностями (ПСП). Работа с цветом.(Pascal) Shick Помощь студентам 7 11.12.2013 19:25
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00