ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Работа с бд в php, asp, asp.net и т.п.
  #1  
Старый 06.08.2008, 23:11
masbear
Познающий
Регистрация: 04.08.2008
Сообщений: 81
Провел на форуме:
140742

Репутация: 23
По умолчанию Работа с бд в php, asp, asp.net и т.п.

Меня вот очень интересует, можно ли использовать текстовые файлы вместо бд. Вот пример на C#
...
StreamReader sr = new StreamReader("db.txt");
...
Здесь меня больше всего интересует следуещее: что произойдет, когда много людей-посетителей сайта обратятся к текстовому файлу, будут создаваться потоки, и по идее должно произойти что-то страшное. Но нет, у меня на сайте так работает гостевая книга (стырил пример из книги), вроде никаких сбоев не было.
Ведь по идее бд - те же текстовые файлы, и к ним тоже одновременно обращается много людей.
 
Ответить с цитированием

  #2  
Старый 06.08.2008, 23:50
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме:
3371897

Репутация: 1462
По умолчанию

При чтении ничего страшного не произойдет...

незнаю как подробно организованна запись в asp.net ,
имхо было бы разумно, организовать поочередную запись в файл...
если вот имхо писать аналогично например на Си & WinAPI , то можно было бы например через api блокировать файл на запись(аля FILE_SHARE_READ) при записи в него и разблокировать сразу после записи , а перед попыткой записать делать проверку не заблокирован ли он на запись др процессом, если занят, то слип милисек(и приэтом надо учеть что содержимое файла изменилось), и снова проверку...
канешн кривой вариант, тк имхо в .net наверняка уже реализованно нечто подобное...
 
Ответить с цитированием

  #3  
Старый 07.08.2008, 01:09
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

Цитата:
Ведь по идее бд - те же текстовые файлы, и к ним тоже одновременно обращается много людей.
вот только БД умная )).

Цитата:
много людей-посетителей
это сколько?

А вообще делается это так. Выделяешь объект, который умеет работать с данными. Это DAO - data access object. Там вся информация о местоположении данных, например, настройки БД. Все операции с данными только через него. Больше никакая часть программы не знает как взять данные. К этому DAO обращаются другие твои объекты - из следующего уровня - уровня логики твоего приложения - говорят DAO - дай мне объект - DAO связывается с БД и возвращает объект/производит действие какое-то. Так вот синхронизация данных осуществляется как раз при помощи этого DAO. Если рассматривать на примитивном уровне - то это всякие synchronized методы. шаблон singleton так же в помощь. На более высоком уровне - это уже работа с бд, где она сама синхронизирует данные и разработчику нужно следить только за кол-вом одновременных подключений к базе данных - у бд оно ограничено - надо ограничивать и со стороны приложения, чтобы все не падало(я про пул коннектеров). Ну а если рассматривать на совсем нормальном уровне - то юзаешь фрэймворк, который закрывает от тебя всю работу с бд =)). Например, hibernate.
 
Ответить с цитированием

  #4  
Старый 07.08.2008, 01:18
geezer.code
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме:
7452489

Репутация: 1359


По умолчанию

Цитата:
Сообщение от masbear  
Меня вот очень интересует, можно ли использовать текстовые файлы вместо бд. Вот пример на C#
...
StreamReader sr = new StreamReader("db.txt");
...
Здесь меня больше всего интересует следуещее: что произойдет, когда много людей-посетителей сайта обратятся к текстовому файлу, будут создаваться потоки, и по идее должно произойти что-то страшное. Но нет, у меня на сайте так работает гостевая книга (стырил пример из книги), вроде никаких сбоев не было.
Ведь по идее бд - те же текстовые файлы, и к ним тоже одновременно обращается много людей.
лучше не просто текстовый а xml.
 
Ответить с цитированием

  #5  
Старый 07.08.2008, 11:30
masbear
Познающий
Регистрация: 04.08.2008
Сообщений: 81
Провел на форуме:
140742

Репутация: 23
По умолчанию

вобщем как я понял, можно юзать текстовые файлы. ура!!!
не знаю как в php, но в asp net очень муторно работать с бд
вот пример инициализации простейшей бд

Код:
private static OleDbConnection con = null;
    private static OleDbCommand selectCommand = null;
    private static OleDbCommand updateCommand = null;
    private static OleDbCommand deleteCommand = null;
    private static OleDbCommand insertCommand = null;
    private static OleDbDataAdapter adapter = null;
    public  static DataSet ds = null;


    /// <summary>
    /// Загрузка базы данных
    /// </summary>
    public static void LoadData(string path)
    {
        con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path);

        selectCommand = new OleDbCommand("SELECT * FROM MainTable", con);

        insertCommand = new OleDbCommand("INSERT INTO `MainTable` (`Number`, `Nick`, `Password`, `Mail`, `WMZ`, `Referer`, `Level`, `Money`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", con);
        insertCommand.Parameters.AddRange(new OleDbParameter[] {
            new OleDbParameter("Number", OleDbType.Integer, 0, "Number"),
            new OleDbParameter("Nick", OleDbType.VarWChar, 0, "Nick"),
            new OleDbParameter("Password", OleDbType.VarWChar, 0, "Password"),
            new OleDbParameter("Mail", OleDbType.VarWChar, 0, "Mail"),
            new OleDbParameter("WMZ", OleDbType.VarWChar, 0, "WMZ"),
            new OleDbParameter("Referer", OleDbType.VarWChar, 0, "Referer"),
            new OleDbParameter("Level", OleDbType.Integer, 0, "Level"),
            new OleDbParameter("Money", OleDbType.Integer, 0, "Money")});

        updateCommand = new OleDbCommand("UPDATE `MainTable` SET `Number` = ?, `Nick` = ?, `Password` = ?, `Mail` = ?, `WMZ` = ?, `Referer` = ?, `Level` = ?, `Money` = ? WHERE ((`Number` = ?) AND ((? = 1 AND `Nick` IS NULL) OR (`Nick` = ?)) AND ((? = 1 AND `Password` IS NULL) OR (`Password` = ?)) AND ((? = 1 AND `Mail` IS NULL) OR (`Mail` = ?)) AND ((? = 1 AND `WMZ` IS NULL) OR (`WMZ` = ?)) AND ((? = 1 AND `Referer` IS NULL) OR (`Referer` = ?)) AND ((? = 1 AND `Level` IS NULL) OR (`Level` = ?)) AND ((? = 1 AND `Money` IS NULL) OR (`Money` = ?)))", con);
        updateCommand.Parameters.AddRange(new OleDbParameter[] {
            new OleDbParameter("Number", OleDbType.Integer, 0, "Number"),
            new OleDbParameter("Nick", OleDbType.VarWChar, 0, "Nick"),
            new OleDbParameter("Password", OleDbType.VarWChar, 0, "Password"),
            new OleDbParameter("Mail", OleDbType.VarWChar, 0, "Mail"),
            new OleDbParameter("WMZ", OleDbType.VarWChar, 0, "WMZ"),
            new OleDbParameter("Referer", OleDbType.VarWChar, 0, "Referer"),
            new OleDbParameter("Level", OleDbType.Integer, 0, "Level"),
            new OleDbParameter("Money", OleDbType.Integer, 0, "Money"),
            new OleDbParameter("Original_Number", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "Number", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Nick", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Nick", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Nick", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Nick", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Password", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Password", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Password", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Password", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Mail", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Mail", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Mail", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Mail", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_WMZ", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "WMZ", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_WMZ", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "WMZ", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Referer", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Referer", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Referer", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Referer", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Level", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Level", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Level", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "Level", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Money", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Money", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Money", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "Money", DataRowVersion.Original, null)});


        deleteCommand = new OleDbCommand("DELETE FROM `MainTable` WHERE ((`Number` = ?) AND ((? = 1 AND `Nick` IS NULL) OR (`Nick` = ?)) AND ((? = 1 AND `Password` IS NULL) OR (`Password` = ?)) AND ((? = 1 AND `Mail` IS NULL) OR (`Mail` = ?)) AND ((? = 1 AND `WMZ` IS NULL) OR (`WMZ` = ?)) AND ((? = 1 AND `Referer` IS NULL) OR (`Referer` = ?)) AND ((? = 1 AND `Level` IS NULL) OR (`Level` = ?)) AND ((? = 1 AND `Money` IS NULL) OR (`Money` = ?)))", con);
        deleteCommand.Parameters.AddRange(new OleDbParameter[] {
            new OleDbParameter("Original_Number", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "Number", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Nick", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Nick", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Nick", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Nick", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Password", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Password", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Password", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Password", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Mail", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Mail", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Mail", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Mail", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_WMZ", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "WMZ", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_WMZ", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "WMZ", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Referer", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Referer", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Referer", OleDbType.VarWChar, 0, ParameterDirection.Input, false, 0, 0, "Referer", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Level", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Level", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Level", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "Level", DataRowVersion.Original, null),
            new OleDbParameter("IsNull_Money", OleDbType.Integer, 0, ParameterDirection.Input, 0, 0, "Money", DataRowVersion.Original, true, null),
            new OleDbParameter("Original_Money", OleDbType.Integer, 0, ParameterDirection.Input, false, 0, 0, "Money", DataRowVersion.Original, null)});

        adapter = new OleDbDataAdapter(selectCommand);
        adapter.DeleteCommand = deleteCommand;
        adapter.InsertCommand = insertCommand;
        adapter.UpdateCommand = updateCommand;
        adapter.TableMappings.AddRange(new DataTableMapping[] {
            new DataTableMapping("Table", "MainTable", new DataColumnMapping[] {
                        new DataColumnMapping("Number", "Number"),
                        new DataColumnMapping("Nick", "Nick"),
                        new DataColumnMapping("Password", "Password"),
                        new DataColumnMapping("Mail", "Mail"),
                        new DataColumnMapping("WMZ", "WMZ"),
                        new DataColumnMapping("Referer", "Referer"),
                        new DataColumnMapping("Level", "Level"),
                        new DataColumnMapping("Money", "Money")})});


        ds = new DataSet();
        adapter.Fill(ds, "MainTable");
xml тоже хорошая тема, но для больших бд он имхо не подойдет, т.к. только на теги уйдет много килобайт.
 
Ответить с цитированием

  #6  
Старый 08.08.2008, 10:32
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
Ведь по идее бд - те же текстовые файлы, и к ним тоже одновременно обращается много людей.
муахахаха!
А как же оптимизация/синхронизация/серверные фичи?))

Цитата:
но в asp net очень муторно работать с бд
Бред, кури доки по ASP.NET, а пример этот левый )
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Что такое Php? PAPA212 Болталка 13 28.12.2007 20:44
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ