繁体   English   中英

SQL Server:存储来自VB.NET的数据

[英]SQL Server : store data from VB.NET

我有一个大问题。 我必须在SQL Server数据库中存储日期时间和值。

我写了一个网站,其中包含带有条目的表。

一项包含:日期,时间和值

例如:

Entry A : -> 01.01.2014 - 07.06.2014 , 00:00 - 07:15 , Value: 450
    Entry A : -> 01.01.2014 - 07.06.2014 , 07:30 - 15:30 , Value: 230
    Entry A : -> 01.01.2014 - 07.06.2014 , 15:45 - 23:45 , Value: 300

    Entry B : -> 01.01.2014 - 07.06.2014 , 00:00 - 02:15 , Value: 130
    Entry B : -> 01.01.2014 - 07.06.2014 , 02:30 - 10:45 , Value: 250
    Entry B : -> 01.01.2014 - 07.06.2014 , 11:00 - 23:45 , Value: 340

    Entry C ...

对于该范围内的每个日期时间,每步在15分钟内存储一个值:

例如,数据库应如下所示:

01.01.2014 00:00:00 | 450 | Entry A
    01.01.2014 00:15:00 | 450 | Entry A
    ..
    ..
    01.01.2014 07:15:00 | 450 | Entry A
    01.01.2014 07:30:00 | 230 | Entry A
    01.01.2014 07.45:00 | 230 | Entry A
    ..
    ..
    01.01.2014 15:30:00 | 230 | Entry A
    01.01.2014 15:45:00 | 300 | Entry A
    01.01.2014 16:00:00 | 300 | Entry A
    ..
    ..
    01.01.2014 23:45:00 | 300 | Entry A
    01.01.2014 07:30:00 | 300 | Entry A
    ..
    ..
    01.01.2014 07:15:00 | 230 | Entry A
    01.01.2014 07:30:00 | 230 | Entry A
    ..
    ..
    02.01.2014 ...

对于每个条目以及直到结束的每一天都是一样的。

我认为问题出在很多插件上。 在五个月内,每天每隔15分钟输入三份。

我写了两个脚本,两个都在工作。 但是保存条目需要很长时间。

脚本1:我直接在VB中执行了SQL语句。

 Dim cmd As DbCommand = New SqlCommand()
 cmd.CommandType = Data.CommandType.Text
 Temp2 = DateTime.Parse(DateStart+ " " + TimeStart)
 Temp3 = DateTime.Parse(DateBegin+ " " + TimeBegin)

 While (Temp2 <= Temp3)
       Date = Temp2
       Temp1 = Temp3

       While (Temp <= Temp1)
             cmd.CommandText = "INSERT INTO [dbo].[_Table_Data]([pr_id],[pr_Nr],[Date],[Value],[nvv]) VALUES (" & pr_id & "," & pr_nr & ", '" & Date & "', " & Value & " , '" & Entry &"')"
             cmd.Connection = con
             con.Open()
             Dim dr As SqlDataReader = cmd.ExecuteReader

             While (dr.Read())
                   '    save entrys
             End While

             con.Close()
             Temp = DateAdd(DateInterval.Minute, 15, Temp)
       End While

       Temp2 = DateAdd(DateInterval.Day, 1, Temp2)
  End While

第二个脚本是一个SQL过程,我将值和日期发送到了SQL过程。 但是没有成功,更糟糕的是第一个脚本。

我也尝试过CTE

;with cte as
(
   select DATEADD(MONTH,DATEDIFF(MONTH,0,@StDate),0) as Sdate 
   union all
   select DATEADD(MINUTE,15,SDate) from cte where SDate < @Enddate
)

但是在这种情况下,我只有一个开始日期和一个结束日期。 如果我必须将01.01.2014-06.06.2014使用一个值,则效果很好。 但是在不同的时间,我不能使用它。

请帮助,我需要一个非常快速的解决方案。

我只是再次尝试了CTE。 以下代码是我的解决方案,效果很好。 现在,我只需要编写一个过程并传递参数。

谢谢大家的阅读和支持

declare @StDate datetime = '01/01/2013 00:00.000'
declare @Enddate datetime = '07/07/2043 00:00.000'
declare @stime datetime = '00:00:00'
declare @etime datetime = '23:45:00'

declare @value as int = 387
declare @id as int = 999


;with cte as
(
 select DATEADD(MINUTE,DATEDIFF(Minute,0,@stime),0) as Stime
 union all
 select DATEADD(MINUTE,15,Stime) from cte where Stime < @etime

 ), cte2 as (
 select DATEADD(MONTH,DATEDIFF(MONTH,0,@StDate),0) as Sdate 
 union all
 select DATEADD(day,1,SDate) from cte2 where SDate < @Enddate
 ) 

Insert into [dbo].[_DV_Prognose_Werte_Temp](pr_id,prognosen_Nummer,zeitstempel,[time],leistungsprognose,nvv) (select '1','1',  Combined = CAST(SDate AS DATETIME) + CAST(stime AS DATETIME),stime, @value,'2' from cte cross join cte2)
OPTION (maxrecursion 0)

伪代码(对不起,我可以告诉您方法,但是我没有时间对其进行编码...)

foreach line ...
    date = first date+time
    enddate = second date+time
    while date >= enddate
        insert into db (please use Parameters)
        date increment by 15 minutes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM