VB.NET中数据库驱动程序的概念

时间:2013-04-28 03:42:57

标签: database vb.net

我已经在VB.NET中开发了几年的程序并熟悉它。我没有太多曝光的地方是数据库。

我正在编写一个名为电影管理员的程序(供我个人使用)。它将存储我所拥有的电影的信息。我选择了Sql Server Compact Edition数据库。假设我有一个包含两个表的数据库,即Info和Cast。信息表有一些列,如movie_name,release_date等。转换表有很少的cols,例如first_name,last_name等。

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

我的疑问:

  1. 一旦我有数据,每次我需要添加,编辑或删除记录时,我必须打开一个连接,触发一个sql并关闭连接。对 ?有没有办法在不使用Sql的情况下执行此操作?加上这个概念还可以。

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

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

3 个答案:

答案 0 :(得分:3)

1)一旦我有了数据,每次我需要添加,编辑或删除记录时,我必须打开连接,触发sql并关闭连接。对 ?有没有办法在不使用Sql的情况下执行此操作?加上这个概念还可以。

否。要更新数据库,必须使用数据库。在数据库中创建存储过程以处理您的功能,然后从代码中调用它并传入任何需要保存的数据。不要使用INLINE SQL。 Paramterized存储过程是可行的方法。

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

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

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

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

有很多教程/指南向您展示如何通过存储过程调用从您的代码更新。还有大量的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,则可以将保存功能放在您的课​​程中。它会以同样的方式工作,它不是那么明显分开。

答案 1 :(得分:2)

关于你的问题。

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

2:由于您正在处理数据集,因此您可能需要查看一些提示DataSet

3:您也可以尝试使用数据适配器和数据表。我不确定你的问题3是什么意思。

干杯

答案 2 :(得分:0)

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

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

最后你的第3个问题,使用sql查询比通过数据集循环更容易(尽快摆脱数据集) 祝你在通往 rdbms

的道路上好运