Лучшее место для помещения данных приложения? [дубликат]

Ваши команды противоречат.

Если files.file_id определено UNIQUE (или PRIMARY KEY), вам не нужно LIMIT 1. И вам вообще не нужна явная блокировка. Просто запустите UPDATE, поскольку во всей транзакции затрагивается только одна строка, тупиковая ситуация невозможна. (Если нет побочных эффектов от триггеров или правил или задействованных функций.)

Если files.file_id не UNIQUE (как кажется), то UPDATE может влиять на несколько строк в произвольном порядке и только один из них заблокирован, рецепт для тупиков. Тогда более неотложная проблема заключается в том, что запрос не выполняет то, с чего вы, похоже, хотите начать.

Лучшее решение зависит от недостающей информации. Это будет работать:

UPDATE files
SET    ...
WHERE  primary_key_column = (
         SELECT primary_key_column
         FROM   files 
         WHERE  file_id = 123
         LIMIT  1
     --  FOR    UPDATE SKIP LOCKED
         );

Нет BEGIN; и COMMIT;, необходимых для одной команды, в то время как автоматическая фиксация по умолчанию включена.

Возможно, вы захотите добавить FOR UPDATE SKIP LOCKED (или FOR UPDATE NOWAIT) , чтобы пропустить или сообщить об ошибке, если строка уже заблокирована.

И вы, вероятно, захотите добавить предложение WHERE, которое позволит избежать повторной обработки одной и той же строки.

Подробнее здесь:

7
задан Community 23 May 2017 в 12:34
поделиться

9 ответов

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

Должен решить к C:\Documents and Settings\All Users\Application Data\

Оттуда, сделайте подпапки, такие как MyCompany\MyApp

2
ответ дан 6 December 2019 в 14:11
поделиться

Если Вы используете.NET, Приложение. CommonAppDataPath должен работать. Также удостоверьтесь, что виртуализация выключена для Вашего приложения

2
ответ дан 6 December 2019 в 14:11
поделиться

Простая победа API: SHGetFolderPath с CSIDL_COMMON_APPDATA как тип папки.

5
ответ дан 6 December 2019 в 14:11
поделиться

Если Вы используете.NET, Приложение. CommonAppDataPath должен работать.

1
ответ дан 6 December 2019 в 14:11
поделиться

%ALLUSERSPROFILE %\Application Data\App
это - вероятно, единственный каталог, к которому все пользователи могут получить доступ без поднятых полномочий.

1
ответ дан 6 December 2019 в 14:11
поделиться

Если пользователи не собираются изменять данные непосредственно, и они будут только изменены приложением, как насчет IsolatedStorage - http://msdn.microsoft.com/en-us/library/3ak841sy (По сравнению с 80) .aspx

1
ответ дан 6 December 2019 в 14:11
поделиться

Средства проверки дают жизненное представление, чтобы сделать это в C или C++. Таким образом, я проголосовал за его ответ.

Вот детали, которые он не учел:

// assumes
// company is a pointer to a character sting containing company name
// appname is a pointer to a character string containing application name
// fname   is a pointer to a character string cintaining name of file to be created

#include <shlobj.h>   // for SHGetFolderPath
#include <direct.h>   // for _mkdir

char path[MAX_PATH];
SHGetFolderPath(NULL,CSIDL_COMMON_APPDATA,NULL,NULL,path);
strcat(path,"/");
strcat(path,company);
_mkdir(path);
strcat(path,"/");
strcat(path,appname);
_mkdir(path);
strcat(path,"/");
strcat(path,fname);

// path is now a character string which can passed to fopen
1
ответ дан 6 December 2019 в 14:11
поделиться

Можно также поместить его в базу данных.

0
ответ дан 6 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: