Я использую GDataDB в качестве онлайн INI-файла для сохранения настроек пользователя в «облаках». Я использую одну электронную таблицу, как показано ниже:
username create update expire amount
3600001 20120303 20120303 20180303 9
3600001 20120303 20120303 20160303 9
3600020 20120301 20120303 20190505 14
Интересно, что происходит при одновременной записи / обновлении. Я имею в виду это безопасно? Что ты думаешь?
Вот коды: как вы видите, у вас мало шансов получить доступ к файлу в одно и то же время, но я прошу для справки в будущем, чтобы увидеть, можно ли его использовать или нет при тяжелых операциях - не слишком много - чтение - запись. Или я могу реализовать механизм блокировки?
public class License
{
public string username { get; set; }
public string create { get; set; }
public string update { get; set; }
public string expire { get; set; }
public double amount { get; set; }
}
private static void Main(string[] args) {
string myaccount = "xxxxxxxxxx@gmail.com";
string mypass = "xxxxxxxxxxxxxxxx";
string spreadsheet = "licence";
string username = "03600001";
double amount = 9.0d; //bucks
int extend = 1; //year
// create the DatabaseClient passing my Gmail or Google Apps credentials
IDatabaseClient client = new DatabaseClient(myaccount, mypass);
// get or create the database. This is the spreadsheet file
IDatabase db = client.GetDatabase(spreadsheet) ?? client.CreateDatabase(spreadsheet);
// get or create the table. This is a worksheet in the file
// note I am using my Person object so it knows what my schema needs to be
// for my data. It will create a header row with the property names
ITable<License> table = db.GetTable<License>(spreadsheet) ?? db.CreateTable<License>(spreadsheet);
var license = new License();
IList<IRow<License>> rows = table.FindStructured(String.Format("username={0}", username)).OrderByDescending(o => o.Element.expire).Take(1).ToList();
if (rows == null || rows.Count == 0)
{
//add new
license.username = username;
license.create = DateTime.Now.ToString("yyyyMMdd");
license.update = license.create;
license.expire = DateTime.Now.AddYears(extend).ToString("yyyyMMdd");
license.amount = amount;
table.Add(license);
}
else
{
//update
IRow<License> row = rows[0];
DateTime expire = DateTime.ParseExact(row.Element.expire, "yyyyMMdd", null);
row.Element.expire = expire.AddYears(extend).ToString("yyyyMMdd");
row.Element.update = DateTime.Now.ToString("yyyyMMdd");
row.Element.amount = amount;
row.Update();
}
}