1

我已经在 VB.NET 中开发程序几年了,并且对它很熟悉。我接触不多的领域是数据库。

我正在编写一个名为电影管理器的程序(供我个人使用)。它将存储有关我拥有的电影的信息。我选择了 Sql Server Compact Edition 数据库。假设我有一个包含两个表的数据库,即 Info 和 Cast。信息表有几个列,如电影名称、发布日期等。Cast 表的列数很少,例如 first_name、last_name 等。

现在我创建了一个数据集,它从数据库中读取所有表的信息(打开连接,填充表信息,关闭连接)。这样在全局变量中我就有了数据库的快照。

我的疑问:

  1. 一旦我有了数据,每次我需要添加、编辑或删除记录时,我都必须打开一个连接、触发一个 sql 并关闭连接。正确的 ?有没有办法在不使用 Sql 的情况下做到这一点?另外,这个概念可以吗。

  2. 由于我没有使用结构,所以我需要创建空数据集来存储临时信息。这方便吗?

  3. 如果我必须在数据集表中搜索特定的东西,那么我是否必须遍历所有项目,或者我可以在数据集上使用 sql 还是有替代方法?

4

3 回答 3

3

1)一旦我有了数据,每次我需要添加、编辑或删除记录时,我都必须打开一个连接,触发一个 sql 并关闭连接。正确的 ?有没有办法在不使用 Sql 的情况下做到这一点?另外,这个概念可以吗。

不可以。要更新数据库,您必须使用该数据库。在数据库中创建一个存储过程来处理您的功能,然后从代码中调用它并传入需要保存的任何数据。不要使用内联 SQL。参数化存储过程是要走的路。

2)由于我没有使用结构,所以我需要创建空数据集来存储临时信息。这方便吗?

这取决于你在做什么。我将创建一个对象模型来保留我更新的数据,然后在需要保存我的更改时将属性传递到存储过程中。

3)如果我必须在数据集表中搜索特定的东西,那么我是否必须遍历所有项目,或者我可以在数据集上使用 sql 还是有替代方法?

您可以循环行,也可以使用 linq 提取您需要的内容。Linq 非常好,因为它基本上是针对集合的 .NET 编码查询。

有很多教程/指南向您展示如何通过存储的 proc 调用从您的代码中进行更新。还有大量的 linq 教程。基本上,针对您的表的 linq 查询将类似于:

dim result as Generic.List(of String) =
  (from r in table.AsEnumerable()
  select r
  where r["columnName"] = "the value").ToList()

这种语法可能有点偏离,但看起来像这样。

编辑

您的型号:

Public Class EmployeeModel
    Public Property Id
    Public Property FirstName
    Public Property Last Name
    Public Property JobCode
    Public Sub EmployeeModel(your params)
        //set properties
    End Sub
End Class

您的 DAL:

Public Shared Class EmployeeDAL
    Public Shared Sub SaveEmployee(ByRef model as EmployeeModel)
       // call your sp_SaveEmployee stored procedure and set the parameters to the model properties
       // @id = EmpoyeeModel.Id
       // @JobCode = Employee.JobCode
       // ...
    End Sub
End Class

我每隔几个月使用一次 VB,所以那里可能存在一些小的语法错误。但这基本上就是您需要做的所有事情。保存数据的功能在 DAL 中,而不是在类本身中。但是,如果您不想使用 DAL,则可以将保存功能放在您的类中。它会以同样的方式工作,只是没有那么清楚地分开。

于 2013-04-28T05:16:56.513 回答
2

关于你的问题。

数字 1:您必须连接到数据库才能存储和检索数据。有很多方法可以处理它,其中一种方法是使用 app.config 或者您可以简单地创建一个函数,在每次需要时调用连接。

数字 2:由于您正在处理数据集,这里有一些提示,您可能想查看DataSet

数字 3:您也可以尝试使用 Data Adapter 和 Data Table。我不确定你的问题 3 是什么意思。

干杯

于 2013-04-30T16:36:34.390 回答
0

我对您使用数据库和计算机内存的方式有疑问。问题1:既然你已经有一个保存电影信息的数据库,为什么还要在内存中保存相同的信息?,产生额外的开销。如果您的答案是为了性能,或者我的内存很便宜,那么您为什么不使用 xml 或 flatfile 呢?此 senario 不需要数据库。

问题2:你就像一个不知道他使用的武器的士兵?正确的?因为您在问关于打开连接的第一个问题是愚蠢的问题。答案是肯定的,您每次保存/读取数据时都必须打开连接并尽快关闭它。 你关于convinent的第二个问题答案是否定的。而是创建具有所有字段作为属性的类和一些用于初始化、保存、删除的方法。这样,您必须编写更少的代码。nad 假设你有一个电影名称 xyz 可以有另一个电影 xyz 你将如何区分它?如果你有完整的信息 b4 你可以通过发布日期、演员表等来完成,但这仍然很难,所以为你的表创建一个主键

最后是你的第三个问题,使用 sql 查询比遍历数据集更容易(尽快摆脱数据集)祝你在通往rdbms的道路上好运

于 2013-04-28T04:13:38.033 回答