Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
1

Подключение приложения к БД MySQL

20.04.2014, 13:41. Просмотров 1543. Ответов 15
Метки нет (Все метки)

Христос Воскрес!
Просьба ногами не бить, т.к. я только учусь...
А проблема в следующем - делаю приложение, которое должно работать с базой. Сначала сделал класс для подключения:
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;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Windows.Forms;
 
namespace City_Government
{
    class DBConnection
    {
        private string conString = "Database=gover;Data Source=127.0.0.1;User Id=root;Password=";
 
        public void Connect()
        {
            string constring = this.conString;
            MySqlConnection con = new MySqlConnection(conString);
            try
            {
                con.Open();
                //MessageBox.Show("Подкючение успешно!", "gover");
            }
            catch (Exception)
            {
                //MessageBox.Show("Подключение не установлено! :( ", "Упс!");
            }            
        }
    }
}
Вроде как подключение работало-MessageBox говорил что подключение успешно.
Потом начал делать добавление нового служащего.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
namespace City_Government
{
    public partial class AddMemberForm : Form
    {
        public AddMemberForm()
        {
            InitializeComponent();
        }
 
        private void Add_Click(object sender, EventArgs e)
        {
 
            //string constring = "Database=gover;Data Source=localhost;User Id=root;Password=";
            //MySqlConnection con = new MySqlConnection(constring);
            //con.Open();
 
            DBConnection con = new DBConnection();
            con.Connect();
 
            Check check = new Check();
 
            string nametd = check.nsp(name.Text);
            string surtd = check.nsp(surname.Text);
            string patd = check.nsp(patronymic.Text);
            DateTime bdtd = Convert.ToDateTime(borndate.Text);
            string addrtd = address.Text;
            string phonetd = check.p(phone.Text);
          
            MySqlCommand cm = new MySqlCommand();
 
            cm.Parameters.AddWithValue("@name", nametd);
            cm.Parameters.AddWithValue("@surname", surtd);
            cm.Parameters.AddWithValue("@address", addrtd);
            cm.Parameters.AddWithValue("@h_phone", phonetd);
            cm.Parameters.AddWithValue("@patronymic", patd);
            cm.Parameters.AddWithValue("@borndate", bdtd);
 
            cm.ExecuteNonQuery();
           // MySqlCommand cm = new MySqlCommand(@"Insert into member (`name`,`surname`,`address`,`h_phone`,`patronymic`,`borndate`) values('@nametd', '@surtd','@addrtd','@phonetd', '@patd', '@bdtd')");-в этой строке все очень плохо... напихал всего, что мог найти в инете...
           
        }
 
    }      
}
Сначала пытался сделать добавление через ту жуткую длинную строку с инсертом, но не работало-не добавляло, хотя не писало ошибок. Потом нашел вариант с добавление параметров и ExecuteNonQuery(), и вот тут начало ругаться что подключение должно быть открыто и валидно-дебаг показывал что подключение isopen, или true, как то так. И вот я теперь сижу в ступоре-что не так с подключением, как делать эти запросы...
И еще-подскажите, пожалуйста, как надо указывать values при инсерте? И в каком виде данные поступают в приложение при селект запросе? Вот к примеру в PHP возвращается пост массив, а тут как?
Заранее благодарен)

Добавлено через 2 часа 58 минут
я вот не понимаю-либо тут все такие застенчивые, либо я не знаю. что-то не позволяет людям какие-то мысли отписать. может я что-то не корректно формулирую, может еще что... 30+ просмотров, и ни 1 комента. неужели же ни кто не знает ничего по сабжу... много раз тут же читал-задавайте вопросы на форуме, форумы для того и существуют чтобы на них отвечать
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 13:41
Ответы с готовыми решениями:

Подключение к БД MySQL из VB.NET приложения
Добрый день. В своем приложении работаю с базой данных MySQL. На сервере есть...

c# подключение к MySQL
Я подключался к MySQL с помощью MySQL Connector'a, но мне препод сказал, для...

Подключение к MySQL
Успешно подключился к MySQL через драйвер ODBC. Но теперь такая проблема: В...

Подключение с MySql
Здравствуйте форумчане, нужна ваща помощь. Не получается подключиться к...

Подключение MySQL в C#
Здравствуйте,форумчане. Суть вопроса состоит в том, что я не могу подключиться...

15
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 14:37 2
Надо сначала 49 строку, потом уже параметры заполнять и в конце ExecuteNonQuery. Одинарные кавычки в values убери.
0
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
20.04.2014, 15:00  [ТС] 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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 
namespace City_Government
{
    public partial class AddMemberForm : Form
    {
        public AddMemberForm()
        {
            InitializeComponent();
        }
 
        private void Add_Click(object sender, EventArgs e)
        {
            MySqlConnectionStringBuilder mysqlcon = new MySqlConnectionStringBuilder();
            mysqlcon.Server = "127.0.0.1";
            mysqlcon.Database = "gover";
            mysqlcon.UserID = "root";
            mysqlcon.Password = "";
 
            MySqlConnection con = new MySqlConnection();
            con.ConnectionString = mysqlcon.ConnectionString;
 
            try
            {
                con.Open();
            }
 
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
            Check check = new Check();
 
            string nametd = check.nsp(name.Text);
            string surtd = check.nsp(surname.Text);
            string patd = check.nsp(patronymic.Text);
            DateTime bdtd = Convert.ToDateTime(borndate.Text);
            string addrtd = address.Text;
            string phonetd = check.p(phone.Text);
 
            //MySqlCommand cm = new MySqlCommand(@"Insert into `gover`.`member` ('name','surname','address','h_phone','patronymic','borndate') values('" + nametd + ", '" + surtd + "','" + addrtd + "','" + phonetd + "', '" + patd + "', '" + bdtd + "')");
            MySqlCommand cm = new MySqlCommand(@"Insert into `gover`.`member` ('name','surname','address','h_phone','patronymic','borndate') values(@nametd, @surtd, @addrtd, @phonetd, @patd, @bdtd)");
 
            cm.Parameters.AddWithValue("@name", nametd);
            cm.Parameters.AddWithValue("@surname", surtd);
            cm.Parameters.AddWithValue("@address", addrtd);
            cm.Parameters.AddWithValue("@h_phone", phonetd);
            cm.Parameters.AddWithValue("@patronymic", patd);
            cm.Parameters.AddWithValue("@borndate", bdtd);
 
            cm.ExecuteNonQuery();
        }
    }      
}
когда подходит пора cm.ExecuteNonQuery(); что то вроде connection must be validate and open.
подключаюсь к mysql в денвере. все по умолчанию там. может строка подключения не правильная? почему то же пишет ошибку
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 16:06 4
Где у тебя привязка MySQLCommand к соединению (второй параметр в конструкторе)? Должно быть:
C#
1
MySqlCommand cm = new MySqlCommand(@"Insert into member (name,surname,address,h_phone,patronymic,borndate) values(@nametd, @surtd, @addrtd, @phonetd, @patd, @bdtd)", con);
1
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
20.04.2014, 22:10  [ТС] 5
nmcf, получилось) записи в бд вставляются))) осталось только проблема с преобразованием даты/времени. в бд вставляются нули, а из бд не вытягивает данные из-за невозможности преобразования даты/времени
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 22:21 6
Что значит, не вытягиваются? Как ты это делаешь?
1
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
20.04.2014, 22:26  [ТС] 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DataTable dt = new DataTable();
 
            MySqlConnectionStringBuilder mysqlcon = new MySqlConnectionStringBuilder();
            mysqlcon.Server = "127.0.0.1";
            mysqlcon.Database = "gover";
            mysqlcon.UserID = "root";
            mysqlcon.Password = "";
            MySqlConnection connect = new MySqlConnection(mysqlcon.ConnectionString);
            string querystring = @"select * from member";
            MySqlCommand com = new MySqlCommand(querystring, connect);
            connect.Open();
            using (MySqlDataReader dr = com.ExecuteReader())
            {
                if (dr.HasRows) dt.Load(dr);//в dt.Load(dr) ругается на невозможность преобразования типов date/time
 
            }
            dataGridView1.DataSource = dt;
по большей части код не мой. нашел пример и оттуда скопипастил.
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
20.04.2014, 22:29 8
Попробуй через MySQLDataAdapter читать в DataTable.
1
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
23.04.2014, 11:58  [ТС] 9
проблема с селектом такая-когда я вставляю данные в таблицу-поле даты времени нулевое, ну т.е. все значения нули. когда я делаю селект запрос-ругается на невозможность конвертировать дату из mysql в формат, который в c#. если я в самой базе задаю дату, то селект делается нормально. как делать это преобразование? а лучше как задать формат даты времени при создании базы, и как задать формат в c#?
чтоб он одинаковый и там и там оказался

Добавлено через 9 минут
и еще такой вопрос-у меня сейчас в коде новое подключение к бд создается при каждой операции-при вставке, при выборке. но мне кажется что это не хорошо. надо сделать одно место в проекте, где это подключение будет 1 раз создаваться на все время работы. тогда оно хоть всего 1 будет, а не как сейчас-при каждом щелчке по кнопке еще 1 создается.
сначала я сделал класс. в нем сделал подключение. при старте проги создавал экземпляр. но работать через него не получалось-типы ведь не совпадают. как это можно адекватно сделать?
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
23.04.2014, 14:57 10
Подключение, DataSet и адаптер (адаптеры) вынеси в заголовок класса главного окна. Создавай их по событию Load формы.

Про даты, покажи фрагмент, где ошибка с датами.
0
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
23.04.2014, 16:13  [ТС] 11
ошибки как таковой и нет. из приложения в базу уходит нормальное значение. а вот в базу падает 0000-00-00 00:00:00.
0
Миниатюры
Подключение приложения к  БД MySQL   Подключение приложения к  БД MySQL   Подключение приложения к  БД MySQL  

user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
23.04.2014, 19:46  [ТС] 12
в селекте выюираю дату так
C#
1
date_format(borndate, '%d.%m.%Y' )
инсерт даты в таком виде
C#
1
2
DateTime bdtd = Convert.ToDateTime(borndate.Text);
            MySql.Data.Types.MySqlDateTime td = new MySql.Data.Types.MySqlDateTime(bdtd) ;
правильно это или нет-не знаю. явных ошибок синтаксических нет. как точно эти методы работают я не знаю.
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
23.04.2014, 20:55 13
Для MySql формат даты должен быть YYYY-MM-DD
0
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
23.04.2014, 21:20  [ТС] 14
nmcf, а как сделать так, чтобы комп понял-вот эта шняга есть дата/время в формате гггг-мм-дд. просто я пишу в таком,а он не понимает. нужно ли какое-то преобразование? текст-то даты берется из текст бокса. сначала имеет тип стрингов. как сделать из стрингов подходящую дату/время?
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
23.04.2014, 21:55 15
Вот смотри, проверил лично. Если дата вводится через TextBox, а сохранение идёт через SqlCommand, то надо так:
C#
1
2
3
4
5
6
7
                DateTime d_t = DateTime.Parse(frm2.textBox3.Text);
 
                MySqlCommand cm = new MySqlCommand("insert into table1 (id, nm, dttm) values (@id, @nm, @dttm)", Conn);
 
                cm.Parameters.AddWithValue("@id", Convert.ToInt32(frm2.textBox1.Text));
                cm.Parameters.AddWithValue("@nm", frm2.textBox2.Text);
                cm.Parameters.AddWithValue("@dttm", d_t);
Добавлено через 3 минуты
Т. е. при добавлении параметра, тип значения должен быть DateTime, для этого текст преобразуется через Parse.
Если у тебя есть DataAdapter, то проще добавлять строку в Grid и потом вызывать Update адаптера. В Grid также надо для Value не текстовое представление даты, а DateTime.

У тебя в mysql базе тип DATETIME, правильно?
1
user20011993
13 / 13 / 1
Регистрация: 19.10.2012
Сообщений: 539
23.04.2014, 22:33  [ТС] 16
все заработало))) спасибо огромное))) как раз информации об этом парсе мне и не хватало)))
0
23.04.2014, 22:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2014, 22:33

Подключение к MySQL
Помогите плиз написать работающий код для подключения к MySQL. Перепробовал все...

Подключение к удаленной БД MySQL
Возникла такая проблема: 1.Нужно найти сервис на котором бд будет стоять...

Подключение к бд сайта MySql
Добрый день, как можно подключиться к бд mysql моего сайта? Чтобы выводить...


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

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

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