任何人都可以将此VB.NET代码转换为VBScript吗?

时间:2013-02-13 19:19:18

标签: vb.net vbscript

任何人都可以帮助将这一小块VB.NET转换为VBScript,我没有意识到我在编写测试版应用程序时我将要使用的应用程序是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

2 个答案:

答案 0 :(得分:2)

虽然VB.Net和VBScript共享相似的语法,但它们使用的对象完全是不同的动物。 Vbscript不了解System.Web,System.Data,StringBuilder等。您可能希望查看VB6语法和后期绑定的CreateObject语法来创建AdoDb对象。

答案 1 :(得分: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
%>