在不使用数据库

时间:2017-10-04 05:51:54

标签: c# .net vb.net

我不知道如何在标题中彻底描述它,但是一旦进程返回true,我需要设置变量/标志的永久值,并且可能在程序本身设置一些标志值而不是而不是将其保存到数据库。一旦该变量/标志已经具有该值,则程序不会再次运行该过程并仅使用该值。可能吗?我使用的是VB.Net。我无法使用数据库,因为可以覆盖数据库并使用查询更改值。提前谢谢!

4 个答案:

答案 0 :(得分:0)

您可以在文件中简单地使用二进制/ XML序列化来通过程序保存该变量的状态。每次重新启动应用程序时,您都可以访问该文件中的值以获取其当前状态。

您可以查看此示例 - http://www.centerspace.net/examples/nmath/csharp/core/binary-serialization-example.php

基本上,您不会将值保存在数据库中,而是保存在文件中。无论如何,你需要在某个地方坚持这个价值。

答案 1 :(得分:0)

以下某些方式

您没有说明您是否担心您的应用程序或其他应用程序可能会更改值

我该怎么做

我的想法如下

1)例如,您可以使用xml文件,并使用强密码压缩它的副本。每次更新第一个xml时,您都会更新加密的压缩xml。您可以使用FileSystemWatcher捕获任何文件更改,因此如果某人/某人更改了文件,您只需从zip获取一个新副本

2)您可以将值存储在数据库中并添加触发器以防止删除/更新

例如

    -- delete trigger
CREATE TRIGGER Function_Value_Deleted
ON [dbo].[FunctionsValueTb]
AFTER DELETE 
AS
BEGIN
SET NOCOUNT ON;



 IF EXISTS (
        SELECT [Flag] FROM deleted
    )
    BEGIN
        ROLLBACK;

RAISERROR ('Record deletion  is not allowed...', 16, 1);
END
END

*您也可以使用THROW而不是RAISERROR

**对插入和更新操作执行相同的操作

***您还可以将值存储到日志表中或发送电子邮件

答案 2 :(得分:0)

我发现自己的情况与你的情况非常相似。

最后,我决定使用.NET提供的settings functionaly:它易于使用和维护,到目前为止它给了我很好的结果。

哟我们在这里可以看到我在说什么: Best practice to save application settings in a Windows Forms Application

该线程引用C#但很容易适用于VB.NET:我只需按照相同的步骤添加设置文件:

  

右键单击解决方案资源管理器中的项目,选择“属性”。   选择“设置”选项卡,如果设置没有,请单击超链接   存在。使用“设置”选项卡创建应用程序设置。视觉   Studio创建文件Settings.settings和   包含单例类设置的Settings.Designer.settings   继承自ApplicationSettingsBase

然后,从我的代码中,我使用如下设置:

Dim lastExecDate As Date = My.Settings.LastSuccessfulExecution
lastExecDate = lastExecDate.AddDays(1)
// Perform my next execution and do other stuff
My.Settings.LastSuccessfulExecution = lastExecDate
My.Settings.Save()

下次检索参数LastSuccessfulExecution时,它将具有更新的值。

还有一句话,正如我在上面链接的帖子所述:

  

请注意,您需要设置设置的范围属性。如果你   选择应用程序范围,然后选择Settings.Default。<你的财产>将   是只读的

最后,我发现您使用它来存储产品的到期日期,因此您不希望用户弄乱它。根据{{​​3}}帖子,参数的实际值存储在Application Data用户文件夹中。它以某种方式被混淆,因为它不容易找到,除了它的名字包含哈希...我不知道这是否足够隐藏你。

答案 3 :(得分:0)

如果您希望在应用程序运行时该值仅存在于内存中,则可以使用该应用程序的主线程并使用:

int slotData = randomGenerator.Next(1, 200);
//to set the data
Thread.SetData(Thread.GetNamedDataSlot("SomeDataKey"), slotData);
//to get the data
int newSlotData = (int)Thread.GetData(Thread.GetNamedDataSlot("SomeDataKey"));

或者,如果您的应用仅在Windows上运行,则可以使用Windows注册表,否则您必须将值/对象写入文件并从那里读取。