一位用戶向我報告了我在 ASP.NET 網站上創建的網頁。并且仍然不確定它是否真實。
據她說,盡管創建 Web 頁面是為了從 Oracle 資料庫下載資料,但似乎有時不會下載資料。
與我提到的內容相關的代碼如下,
Private Function makeCSVData() As String
Dim sb As New StringBuilder
sb.AppendLine("検索値, 検索値名稱, 親品目コード, 親品名, 親単位, 子品目コード, 子品名, 子単位")
Dim strSQL As String
If RadioButtonList2.SelectedValue = 0 Then
strSQL = "SELECT Q.*, M0.品名 検索値名稱 FROM (SELECT CONNECT_BY_ROOT Z.親品目コード 検索値, Z.親品目コード, M1.品名 親品名, M1.単位コード 親単位, Z.子品目コード, M2.品名 子品名, M2.単位コード 子単位 "
strSQL = strSQL & "FROM (SELECT * FROM M_BOM WHERE 使用開始日<=SYSDATE AND 使用停止日>SYSDATE) Z "
strSQL = strSQL & "LEFT OUTER JOIN M_HINMO M1 ON M1.品目コード=Z.親品目コード "
strSQL = strSQL & "LEFT OUTER JOIN M_HINMO M2 ON M2.品目コード=Z.子品目コード "
strSQL = strSQL & "START WITH Z.親品目コード IN (SELECT H.FIELD_S1 FROM SMD_GEN.T_PARAMH H WHERE H.HOSTID='" & CL_Hsn & "') "
strSQL = strSQL & "CONNECT BY PRIOR Z.子品目コード = Z.親品目コード ORDER BY 検索値, 親品目コード, 子品目コード) Q LEFT OUTER JOIN M_HINMO M0 ON M0.品目コード=Q.検索値"
Else
strSQL = "SELECT Q.*, M0.品名 検索値名稱 FROM (SELECT CONNECT_BY_ROOT Z.子品目コード 検索値, Z.親品目コード, M1.品名 親品名, M1.単位コード 親単位, Z.子品目コード, M2.品名 子品名, M2.単位コード 子単位 "
strSQL = strSQL & "FROM(SELECT * FROM M_BOM WHERE 使用開始日<=SYSDATE And 使用停止日>SYSDATE) Z "
strSQL = strSQL & "LEFT OUTER JOIN M_HINMO M1 ON M1.品目コード=Z.親品目コード "
strSQL = strSQL & "LEFT OUTER JOIN M_HINMO M2 ON M2.品目コード=Z.子品目コード "
strSQL = strSQL & "START WITH Z.子品目コード IN (SELECT H.FIELD_S1 FROM SMD_GEN.T_PARAMH H WHERE H.HOSTID='" & CL_Hsn & "') "
strSQL = strSQL & "CONNECT BY PRIOR Z.親品目コード=子品目コード ORDER BY 検索値, 親品目コード, 子品目コード) Q LEFT OUTER JOIN M_HINMO M0 ON M0.品目コード=Q.検索値"
End If
System.Diagnostics.Debug.Print("###" & strSQL & "###")
Dim conn As New OracleConnection(CnStringP)
Dim cmd As New OracleCommand(strSQL, conn)
cmd.CommandType = CommandType.Text
Try ' Open the connection
conn.Open()
Dim dr As OracleDataReader = cmd.ExecuteReader()
Do While dr.Read
sb.Append("""" & replaceDoubleQuotes(dr("検索値")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("検索値名稱")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("親品目コード")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("親品名")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("親単位")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("子品目コード")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("子品名")) & """,")
sb.Append("""" & replaceDoubleQuotes(dr("子単位")) & """,")
sb.Append(vbCrLf)
Loop
conn.Close()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Return sb.ToString()
End Function
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim startupScript As String
Dim dtNow As DateTime = DateTime.Now
Dim csvString As String = makeCSVData()
Dim csvFile As String
csvFile = "BOMSERCH_" & dtNow.ToString("yyyyMMddHHmmss")
Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" & csvFile & ".csv")
Response.BinaryWrite(Encoding.GetEncoding("Shift-JIS").GetBytes(csvString))
Response.End()
End Sub
如果你知道,你能告訴我原因或我應該嘗試什么嗎?謝謝你。
uj5u.com熱心網友回復:
好的,所以雖然回應寫入(BinaryWrite)確實并且應該作業?
我建議使用傳輸檔案。
例如:
strFile = Server.MapPath(@"~/UpLoadFiles/" strFileOnly);
string sMineType = MimeMapping.GetMimeMapping(strFileOnly);
Response.ContentType = sMineType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" strFileOnly);
Response.TransmitFile(strFile);
Response.End();
但是,您發布的代碼確實有 response.End,并且應該可以作業,但是作為一般規則,TransmitFile 確實會產生更好的結果,并且首先,它不會將整個檔案讀入記憶體 - 而是將其流出,因此可以減少服務器上的記憶體負載。而且由于它更好地流出,因此資料流往往會更好地作業。
失敗可能是由于互聯網連接不理想造成的,但我發現 TransmitFile 往往會產生更好的結果。
因此,嘗試與上面類似的代碼 - 看看這是否會降低失敗率。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518564.html
標籤:网iis
上一篇:本地構建禁用控制臺日志記錄,但在作為dotnet工具發布后禁用
下一篇:AzureDevops-限制IISWebAppDeploymentOnMachineGroup@0任務XmlVariableSubstitution的范圍
