powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавление записей в БД Firebird средствами C#
9 сообщений из 9, страница 1 из 1
Добавление записей в БД Firebird средствами C#
    #38126610
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Только начал осваиваться с работой с БД средствами C#, возник вопрос. Добавляю записи в БД - время изменения файла БД обновляется, вес файла меняется, но записей новых через IBExpert не видать. Листинги:
Вызов сохранения объекта в БД:
Код: 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.
namespace IntroSpace.Формы_проекта
{
    public partial class Planet_Form : Form
    {
        //Переменные формы
        protected Planet planet;

        //Конструкторы
        public Planet_Form()
        {
            InitializeComponent();
            this.comboBox1.Items.AddRange(new object[] {
                "Органическая углеродно-кислородная",
                "Органическая фосфор-азотная",
                "Неорганическая"});
        }

        public Planet_Form(Planet aPlanet) {
            InitializeComponent();
            this.comboBox1.Items.AddRange(new object[] {
                "Органическая углеродно-кислородная",
                "Органическая фосфор-азотная",
                "Неорганическая"});
            this.planet = aPlanet;
            this.FillControlsWithObjectData();
        }

        private void FillControlsWithObjectData() {
            this.textBoxID.Text = this.planet.GetGUID();
            this.textBoxName.Text = this.planet.GetName();
            this.comboBox1.SelectedIndex = this.comboBox1.FindString(this.planet.GetLifeForm());
            this.textBoxGravity.Text = this.planet.GetGravity().ToString();
            this.textBoxDayDur.Text = this.planet.GetDayDuration().ToString();
            this.textBoxYearDur.Text = this.planet.GetYearDuration().ToString();
            this.textBoxDistFromStar.Text = this.planet.GetDistanceFromStar().ToString();
            this.Show();
        }

        //Методы
        private void buttonSAVE_Click(object sender, EventArgs e)
        {
            if (this.planet.Save()) this.Dispose();
            else MessageBox.Show("Не удалось сохранить");
        }
    }
}


Класс собственно объекта:
Код: 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.
namespace IntroSpace{
    public class Planet{
        //Константы класса
        public struct LifeForms{
            public const string LIFE_FORM_CARBON_OXYGEN = "Органическая углеродно-кислородная";
            public const string LIFE_FORM_PHOSPHORUS_NITROGEN = "Органическая фосфор-азотная";
            public const string LIFE_FORM_NON_ORGANICAL = "Неорганическая";
        }

        //Переменные класса
        protected bool isNew;
        protected string guid;
	protected string name;
        protected string lifeForm;
	protected int gravityG;
	protected int dayDurationHours;
	protected int yearDurationDays;
	protected int distanceFromStarKm;

	    //Конструкторы класса
	    public Planet() {
            this.AssumeGUID();
	    }

        public Planet(string aName, string aLifeForm) {
            this.AssumeGUID();
            this.name = aName;
		    this.lifeForm = aLifeForm;
            this.isNew = true;
	    }

        //Методы класса
        private void AssumeGUID() {
            this.guid = System.Guid.NewGuid().ToString().ToUpper();
        }
        
        public string GetGUID() { return this.guid; }
        public string GetName() { return this.name; }
        public string GetLifeForm() { return this.lifeForm; }
        public int GetGravity() { return this.gravityG; }
        public int GetDayDuration() { return this.dayDurationHours; }
        public int GetYearDuration() { return this.yearDurationDays; }
        public int GetDistanceFromStar() { return this.distanceFromStarKm; }

        public void GetGUID(string a) { this.guid = a; }
        public void GetName(string a) { this.name = a; }
        public void GetLifeForm(string a) { this.lifeForm = a; }
        public void GetGravity(int a) { this.gravityG = a; }
        public void GetDayDuration(int a) { this.dayDurationHours = a; }
        public void GetYearDuration(int a) { this.yearDurationDays = a; }
        public void GetDistanceFromStar(int a) { this.distanceFromStarKm = a; }
        
        public Boolean Save() {
            if (this.isNew) {
                string sql;
                sql = "INSERT INTO PLANETS(ID_PLANETS, NAME_PLANETS, LIFEFORM_PLANETS, GRAVITY_PLANETS, DAYDURATION_PLANETS, YEARDURATION_PLANETS, DISTANCEFROMSTAR_PLANETS) "
                    + "VALUES('" + this.guid + "', "
                    + "'" + this.name + "', "
                    + "'" + this.lifeForm + "', "
                    + "" + this.gravityG.ToString() + ", "
                    + "" + this.dayDurationHours.ToString() + ", "
                    + "" + this.yearDurationDays.ToString() + ", "
                    + "" + this.distanceFromStarKm.ToString() + ")";
                
                if (Globals.DATABASE.Execute(sql)) return true;
                else return false;
            }
            else {
                return false;
            }
            return false;
        }
    }
}


Класс для работы с БД:
Код: 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.
namespace IntroSpace {
    class FBDB {
        protected FbConnection fbDB;
        protected FbDataReader recordSet;

        public FBDB() {
            string connectionString = @"character set=WIN1251;data source=localhost;initial catalog=d:\SysFolder\Documents\Visual Studio 2012\Projects\Космос\IntroSpace\bin\Debug\db.fdb;user id=SYSDBA;password=masterkey";
            try {
                this.fbDB = new FbConnection(connectionString.ToString());
                this.fbDB.Open();
            }
            catch (Exception ex) {
                MessageBox.Show("Ошибка подключения к базе данных: " + ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        ~FBDB() {
            try { this.fbDB.Close(); RAM.Clear(); }
            catch (Exception ex) { };
        }

.......

        public bool Execute(string sql) {
            // Здесь fbBD - объект типа FbConnection
            try {
                FbTransaction transact = this.fbDB.BeginTransaction();
                FbCommand sqlReqest = new FbCommand(sql, this.fbDB, transact);
                transact.Commit();
                return true;
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
                return false;
            }
        }
    }
}



Также не исключаю, что в чем-то неправ, т.к. это мои первые попытки ООП.
Ваяю: MS Access 2003, mdb | VB.NET + mdb/SQL Express | 1С 8.2.14, тонкий клиент, управляемое приложение | C# + FDB
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126617
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КириллН,
Я вот не увидел( может не смог)
где вы комнду даете на встаку или обновление
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  public bool Execute(string sql) {
            // Здесь fbBD - объект типа FbConnection
            try {
                FbTransaction transact = this.fbDB.BeginTransaction();
                FbCommand sqlReqest = new FbCommand(sql, this.fbDB, transact);
                transact.Commit();
                return true;
            }
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126619
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиКириллН,
Я вот не увидел( может не смог)
где вы комнду даете на встаку или обновление
Сообщение объекту сохраниться:
Код: c#
1.
2.
3.
4.
5.
        private void buttonSAVE_Click(object sender, EventArgs e)
        {
            if (this.planet.Save()) this.Dispose();
            else MessageBox.Show("Не удалось сохранить");
        }


Самосохранение объекта путем сообщения классу БД внести запись в БД:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        public Boolean Save() {
            if (this.isNew) {
                string sql;
                sql = "INSERT INTO PLANETS(ID_PLANETS, NAME_PLANETS, LIFEFORM_PLANETS, GRAVITY_PLANETS, DAYDURATION_PLANETS, YEARDURATION_PLANETS, DISTANCEFROMSTAR_PLANETS) "
                    + "VALUES('" + this.guid + "', "
                    + "'" + this.name + "', "
                    + "'" + this.lifeForm + "', "
                    + "" + this.gravityG.ToString() + ", "
                    + "" + this.dayDurationHours.ToString() + ", "
                    + "" + this.yearDurationDays.ToString() + ", "
                    + "" + this.distanceFromStarKm.ToString() + ")";
                
                if (Globals.DATABASE.Execute(sql)) return true;
                else return false;
            }
            else {
                return false;
            }
            return false;
        }


Собственно внесение записи в БД:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  public bool Execute(string sql) {
            // Здесь fbBD - объект типа FbConnection
            try {
                FbTransaction transact = this.fbDB.BeginTransaction();
                FbCommand sqlReqest = new FbCommand(sql, this.fbDB, transact);
                transact.Commit();
                return true;
            }



Я предствил три листинга. В первом листинге вызывается метод сохранения в самом объекте. Этот метод расписан во втором листинге, тут как раз формируется SQL-инструкция, которая передается в третий листинг.
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126624
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КириллН,
Послушай, что ты говнокодом по браузеру брызжешь
Я конкретно спросил, где ты вызываешь команду на выполнения
IDbCommand там есть три метода команд

ExecuteNonQuery, ExecuteReader, ExecuteScalar может я их не увидел в твоем коде, дык ткни меня, а может ты не знаешь для чего они, другой вопрос..
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126626
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиКириллН,
Послушай, что ты говнокодом по браузеру брызжешь
Я конкретно спросил, где ты вызываешь команду на выполнения
IDbCommand там есть три метода команд

ExecuteNonQuery, ExecuteReader, ExecuteScalar может я их не увидел в твоем коде, дык ткни меня, а может ты не знаешь для чего они, другой вопрос..
Не, у меня таких нету в говнокоде. =) В какое место их впихивать? Для подключения к БД использую FB Provider. Это что-то меняет?
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126632
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КириллН,
Ну нету, дак нету - видно не судьба.
А как ты умудрился закрытие конекта впихнуть в финализатор?
Он ведь может до конца жизни приложения не вызваться, и соединение всю жись будет открытое
зы я уж не говорю и Dispose, ты наверное до них еще не дошел (( ( ничё страшного, всему своё время..
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126637
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,

Таки ответа на сабжевый вопрос можно не ждать?

Далее: подключение-отключение от БД лучше делать в одной функции? Подключился-выполнил запрос/инструкцию-отключился - так?

Dispose - прошу советов, где пользовать, чтобы явно.
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126641
КириллН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КириллН,

http://www.vr-online.ru/content/c-rabotaem-s-firebird-25-iz-visual-studio-2010-3034
Ответы на вопросы по работе с FB/FDB
Всем спасибо за внимание.
...
Рейтинг: 0 / 0
Добавление записей в БД Firebird средствами C#
    #38126919
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КириллНТаки ответа на сабжевый вопрос можно не ждать?

ты команду создал, однако не вызвал её
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавление записей в БД Firebird средствами C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]