powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема со вставкой строки в таблице через SqlCommand
15 сообщений из 40, страница 2 из 2
Проблема со вставкой строки в таблице через SqlCommand
    #39086234
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoskyANAВводимая пользователем информация передаётся объекту того класса, что инкапсулирует в себе логику её обработки и сохранения где-то. В Вашем случае в базе данных.

т.е. создаешь один класс на все программу (на все случаи сохранения данных) и через него сохранять все данные? примерно такой план?Мои классы зачастую используются и в desktop, и в web, и в сервисах... И везде свой период жизни у объектов этих классов.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39086238
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще интересная логика. Вроде сейчас на каждый клик три new , а если переписать, то почему-то static .
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39088461
vso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vso
Гость
skyANAПолагаю, что паттерн Singleton Вам не знаком, так?

Почитал про Singelton, то что смог придумать:

Код: 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.
//helper.cs

    public sealed class DataStorageHelper
    {
        #region Ядро Singelton
        private DataStorageHelper() { }
        public static readonly DataStorageHelper Instance = new DataStorageHelper() ;
        #endregion

        private SqlCommand cmd = new SqlCommand();
        private SqlConnection conn = new SqlConnection(Properties.Settings.Default.dbMainConnection);
        
        public void InsertVolume(Object [] param)
        {
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = @"INSERT dbo.Volume (NUMBER, CUSTOMER, TITLE, REF_BUILDING, REF_TYP)
                                    SELECT @NUMBER, @CUSTOMER, @TITLE, b.ID_BUILDING, @REF_TYP
                                        FROM Building b WHERE b.KKS = @BUILDING";
            cmd.Connection = conn;
            cmd.Parameters.AddWithValue("@ID_VOLUME", param[0]).SqlDbType = SqlDbType.Int;
            cmd.Parameters.AddWithValue("@NUMBER", param[1]).SqlDbType = SqlDbType.NVarChar;
            cmd.Parameters.AddWithValue("@CUSTOMER", param[2]).SqlDbType = SqlDbType.NVarChar;
            cmd.Parameters.AddWithValue("@TITLE", param[3]).SqlDbType = SqlDbType.NVarChar;
            cmd.Parameters.AddWithValue("@REF_TYP", param[4]).SqlDbType = SqlDbType.Int;
            string s = ExtractBuilding((string)param[1]);
            cmd.Parameters.AddWithValue("@BUILDING", s).SqlDbType = SqlDbType.NVarChar;
            cmd.Parameters["@NUMBER"].Size = 37;
            cmd.Parameters["@CUSTOMER"].Size = 255;
            cmd.Parameters["@TITLE"].Size = 4000;
            cmd.Parameters["@BUILDING"].Size = 5;

            try
            {
                if (conn.State == ConnectionState.Closed)
                  cmd.Connection.Open();
                cmd.Prepare();
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }    
        }

        private string ExtractBuilding(string s)
        {
            return s.Substring(11, 1) + s.Substring(13, 4);
        }


//fmNew.cs
private void fmNew_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (this.DialogResult == DialogResult.OK)
            {
                
                Object[] arrayParam = new Object[5];

                arrayParam[0] = DBNull.Value;
                arrayParam[1] = teNumber.Text;
                arrayParam[2] = teProject.Text;
                arrayParam[3] = meNamePackage.Text;
                arrayParam[4] = cbTypeDocument.EditValue;

                DataStorageHelper.Instance.InsertVolume(arrayParam);

                e.Cancel = false;
            }



Это похоже на то что имелось ввиду?
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39088636
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoЭто похоже на то что имелось ввиду?Нет, лучше уж оставить так как было :)

Не пытайтесь сходу изобрести свой велосипед, почитайте о существующих практиках: ООП, S.O.L.I.D., шаблонах проектирования, MVC, MVP, MVVM И т.п.
Ответьте на вопросы зачем их придумали и где они применяются.

Возможно Ваш проект учебный, или небольшой и не требует дальнейшего развития, и вполне можно оставить так как есть.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089277
vso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vso
Гость
skyANA, я конечно понимаю что здесь часто и помногу ходят с глупостями, но все же хотел попросить навести более конкретную критику на код.

Сегодня почитал в нескольких местах про SOLID, везде написано разными словами с одними и теми же примерами. Но примеры все достаточно обстрактные, без конкретной реализации. А тут года у тебя есть форма и тебе надо, для начала, просто введенную информацию сохранить в БД не очень понятно как перейти от абстракции к частностям.

P.S. И везде написано, что вроде простые требования, но их не так то просто реализовать...
Заранее спасибо!
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089397
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, можно было 4 строчки сэкономить

Код: c#
1.
2.
3.
cmd.Parameters.AddWithValue("@TITLE", c.MENamePackage.Text).SqlDbType = SqlDbType.NVarChar;
...
cmd.Parameters["@TITLE"].Size = 4000;



Код: c#
1.
cmd.Parameters.Add("@TITLE", SqlDbType.NVarChar, 4000).Value = MENamePackage.Text
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089480
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoskyANA, я конечно понимаю что здесь часто и помногу ходят с глупостями, но все же хотел попросить навести более конкретную критику на код.

Сегодня почитал в нескольких местах про SOLID, везде написано разными словами с одними и теми же примерами. Но примеры все достаточно обстрактные, без конкретной реализации. А тут года у тебя есть форма и тебе надо, для начала, просто введенную информацию сохранить в БД не очень понятно как перейти от абстракции к частностям.

P.S. И везде написано, что вроде простые требования, но их не так то просто реализовать...
Заранее спасибо!А вот скажите: Вы базу тоже от формы проектировали?

То есть сначала решили, что будет форма, на ней будут такие-то поля, и "надо, для начала, просто введенную информацию сохранить".
Раз надо сохранить, то сгенерируем БД на основе формы.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089495
vso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vso
Гость
skyANA,

Нет, это у меня рождается независимо от формы, точнее есть какая никакая БД и надо сделать так, чтобы не я мог с ней один работать, а и другие люди не имеющие представление о БД. Поэтому приложение рождается для удобства работы с данными в БД.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089528
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoP.S. И везде написано, что вроде простые требования, но их не так то просто реализовать...
Заранее спасибо!

Надо рассуждать так.

Вот у тебя есть форма. У нее задача какая? Отобразить информацию для пользователя и предоставить обработчики событий. Но ты в обработчик добавляешь создание объектов управления СУБД. Т.е. тем самым нарушаешь принцип S из SOLID - единственность ответственности.
Далее. Сам текст кода формы более чем наполовину состоит из бедного несчастного формирования запроса и его выполнения. Если тебе нужна будет вторая форма, на которой ты захочешь еще какой-то запрос выполнить - она получится такой же! Более того, 90% кода будет одинаковым. А если будет одинаковый код, то чтобы исправить ошибку или сделать доработку в одном месте, тебе придется перелопатить код ВСЕХ форм. Ужасно.

По крайней мере из-за этих двух пунктов следует вынести работу с БД из обработчиков нажатия на кнопку в другое место. А в обработчике вызывать метод работы с БД.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089533
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, решение с хэлпером сгодится на первое время. Только не нужно его делать синглетоном, это бессмысленно. Создавай объекты SqlCommand и SqlConnection (через using, конечно) при каждом вызове и не парься.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089545
vso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vso
Гость
Cat2,

Ок, спасибо, воспользуюсь.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089553
vso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vso
Гость
PallarisКстати, решение с хэлпером сгодится на первое время. Только не нужно его делать синглетоном, это бессмысленно. Создавай объекты SqlCommand и SqlConnection (через using, конечно) при каждом вызове и не парься.

Почему? Почему тогда skyANA меня спрашивал о нём? На что он намекал?
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089594
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoPallarisКстати, решение с хэлпером сгодится на первое время. Только не нужно его делать синглетоном, это бессмысленно. Создавай объекты SqlCommand и SqlConnection (через using, конечно) при каждом вызове и не парься.

Почему? Почему тогда skyANA меня спрашивал о нём? На что он намекал?На то, что не надо лепить статические классы доступа к данным.
А там, где действительно надо их экземпляр(ы) "при каждой записи не создавать", использовать Singleton pattern.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089602
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoskyANA,

Нет, это у меня рождается независимо от формыВот также независимо от пользовательского интерфейса следует проектировать бизнесс-объекты, классы бизнес-логики и классы доступа к данным.
...
Рейтинг: 0 / 0
Проблема со вставкой строки в таблице через SqlCommand
    #39089651
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vsoПочему? Почему тогда skyANA меня спрашивал о нём? На что он намекал?

Не знаю, у него спроси. Какого-либо преимущества тут за синглтоном не вижу.
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема со вставкой строки в таблице через SqlCommand
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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