2013-02-13 95 views
-2

人在那里,可以帮助VB.NET的这个小块转换为VBScript,当我在写我的测试应用程序,我会在使用它的应用程序是所有的VBScript =(任何人都可以将此VB.NET代码转换为VBScript?

我不知道代码从数据库中获取表格,然后写入几行文字,然后将表格写入制表符分隔的文件。我知道我可能必须完全用Lambda重写该部分?我可能必须重新开始,但如果任何人都可以这样做我会很感激!

Private dataTable As New DataTable() 

Protected Sub Page_Load(sender As Object, e As EventArgs) 
PullData() 
End Sub 

Public Sub PullData() 
'Get data from DB into a DataTable 
Using conn As New SqlConnection("Server=.\sqlexpress;Database=DB;User Id=User;Password=Password;") 
    Using cmd As New SqlCommand("SELECT areaID as 'Pond Number', storageDescription + SPACE(1) + areaID as 'Pond Name', " & vbCr & vbLf & "case when fishWeight = 0 then 0 else 1 end as 'Pondis Used', 1 as 'Volume', " & vbCr & vbLf & "FeedDensity AS 'Feed Density',round(cast(FeedDensity * revolution as float(25)),2)/*cast as float for correct rounding*/ AS 'Feed Multiplier'," & vbCr & vbLf & "feedType as 'Feed Type', feedName as 'Feed Name', batchID AS 'FishBatchCode'" & vbCr & vbLf & vbCr & vbLf & "FROM dbo.vwStorageMASTER" & vbCr & vbLf & vbCr & vbLf & "WHERE fkLocationID = 1 AND fkStorageIndicator <> 3 ORDER BY sequenceNumber ASC", conn) 
     conn.Open() 

     Dim da As New SqlDataAdapter(cmd) 
     da.Fill(dataTable) 
    End Using 
End Using 

'Output tab-delimited 
Dim delim As String = vbTab 
Dim sb = New StringBuilder() 

sb.AppendLine("Trafalgar Master File" & vbCr & vbLf & vbCr & vbLf) 
sb.AppendLine(String.Join(delim, "Number of Ponds: ", dataTable.Rows.Count.ToString() & vbCr & vbLf & vbCr & vbLf)) 

sb.AppendLine(String.Join(delim, dataTable.Columns.Cast(Of DataColumn)().[Select](Function(arg) arg.ColumnName))) 
For Each dataRow As DataRow In dataTable.Rows 
    sb.AppendLine(String.Join(delim, dataRow.ItemArray.[Select](Function(arg) arg.ToString()))) 
Next 

'Prompt user to download tab-delimited file 
Dim FileName As String = "test.xls" 
Dim response As System.Web.HttpResponse = System.Web.HttpContext.Current.Response 
response.ClearContent() 
response.Clear() 
response.ContentType = "text/plain" 
response.AddHeader("Content-Disposition", "attachment; filename=" & FileName & ";") 
response.Write(sb.ToString()) 
response.Flush() 
response.[End]() 
End Sub 
+0

好东西你没有使用服务器控件。那会很糟糕。 – 2013-02-13 19:21:29

+3

另外:如果您使用DataReader而不是DataTable,并且将输出直接写入响应流与构建巨大字符串,则.Net版本可能会更快。事实上,你基本上持有(至少)3个内存中的整个页面的副本,以完整的http请求。 – 2013-02-13 19:22:52

+1

我也会刺伤它,自从asp.net/vb.net发布以来,我还没有玩过vbscript。我知道语法看起来很相似,但vbb到vb6反之亦然,这很容易。 vb.net到vbscript会有点困难。 – 2013-02-13 19:27:29

回答

2

这就是我为我的应用程序重写它的方式。最后我基本重新开始,但结果几乎相同;

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> 
<%Response.Buffer = True%> 
<!--#include file="Conn/conn.asp" --> 
<% 
Call DownloadFile() 

Private Sub DownloadFile() 
Dim Comm 
Dim rst 
Dim delim 
delim = vbTab 
response.Clear 

set rst = Server.CreateObject("ADODB.Recordset") 
rst.ActiveConnection = MM_Conn_STRING 
rst.Open "Select COUNT(*) from vwTrafalgarMasterFile" 

'Write titles 
Response.Write("Trafalgar Master File" & vbcrlf & vbcrlf) 
Response.Write("Number of Ponds: " & rst.Fields(0).Value & vbcrlf & vbcrlf) 

If rst.State = 1 Then rst.Close 'Used 1 instead of AdStateOpen as this seemed to cause an error 
rst.Open "Select * from vwTrafalgarMasterFile" 

'Write headers 
If Not rst.EOF Then 
    For Each fld In rst.Fields 
     Response.Write(fld.Name & delim) 
    Next 
    Response.Write vbcrlf 
Else 
    Response.Write("There was a problem retrieving data or no data could be retrieved") 
    Response.End 
    Exit sub 
End if 

'Write rows 
With rst 
.MoveFirst 
Do Until .EOF 
    For Each fld In rst.Fields 
     Response.Write(fld.Value & delim) 
    Next 
    Response.Write vbcrlf 
     .Movenext 
    Loop 
End With 

Dim FileName 
FileName = "TrafalgarMasterFile.xls" 
response.ContentType = "text/plain" 
response.AddHeader "Content-Disposition", "attachment; filename=" + FileName + ";" 
response.Flush 
response.End 

'Clean up 
adoCMD.Close 
Set Comm = Nothing 
Set rst = Nothing 
Set fld = Nothing 
End Sub 
%> 
2

虽然VB.Net和VBScript有着相似的语法,他们使用的对象是完全不同的动物。VBScript中没有的System.Web的知识,系统。 Data,StringBuilder等。相反,您可能需要查看VB6语法和后期绑定的CreateObject语法来创建AdoDb对象。

相关问题