在Visual Basic中创建计算字段

时间:2016-03-07 16:52:04

标签: database vb.net visual-studio calculated-field

我想在数据库中的一个表中创建一个计算字段。我正在使用visual basic,我的IDE是visual studio。

我最近使用访问创建了相同的数据库,并在计算字段的表达式中使用了以下计算:

 (([Grade1]/10)*2)+(([Grade2]/10)*3)+(([Grade3]/10)*5)

首先,我只是将代码粘贴到默认值或字段绑定中作为远景,但是出现了错误。猜猜我不允许使用现有列中的数据进行计算。

enter image description here

有人可以帮我创建这个领域吗?该字段不需要在数据库中,但是如果可以使用datagridview或类似的东西在数据库外部计算它,那么这将是正常的。

1年级,2年级和3年级包含0到100之间的数字。

除非有人能指出我正确的方向,否则我找不到任何教程?

1 个答案:

答案 0 :(得分:1)

为了获得所描述的计算字段,您应该使用以下T-SQL代码:

create table dbo.Enrolement
    (
     StudentID int not null,
     ModuleNUmber int not null,
     Grade1 nchar(3) not null,
     Grade2 nchar(3) not null,
     Grade3 nchar(3) not null,
     Overall as cast(((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5)) as nchar(10))
    )

然而,我不明白为什么要将成绩存储为文本。此外,您的T-SQL代码需要将文本隐式转换为数字,进行计算,然后再将其还原为文本。此外,在转换过程中,您不会告诉SQL转换为什么。因此,如果您有小数位的成绩,那么表中的SELECT将会失败。

insert into dbo.Enrolement
        (
         StudentID,
         ModuleNUmber,
         Grade1,
         Grade2,
         Grade3
        )
values  (
         2, -- StudentID - int
         101, -- ModuleNUmber - int
         N'1.2', -- Grade1 - nchar(3)
         N'1.8', -- Grade2 - nchar(3)
         N'3.9'  -- Grade3 - nchar(3)
        )
select *
from dbo.Enrolement
  

消息245,级别16,状态1,行17转换时转换失败   nvarchar值' 1.2'数据类型int。

所以,我非常建议您使用数字来存储您的成绩,如果他们之后要用于计算。这是与数字相同的表格:

create table dbo.Enrolement
    (
     StudentID int not null,
     ModuleNUmber int not null,
     Grade1 decimal(9, 3) not null,
     Grade2 decimal(9, 3) not null,
     Grade3 decimal(9, 3) not null,
     Overall as ((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5))
    )

我选择使用decimal(9,3),因为从1到9的任何精度都使用相同的存储量(以字节为单位)。同时我将小数位数限制为3,从而允许在小数点后两位进行舍入。与此同时,还有足够的空间来增加&​​#34;添加"成绩(如果这应该有意义)到总计999999.999