Пожалуйста, помогите отладить этот ASP.Net [VB] код. Попытка записи в текстовый файл из БД SQL Server - PullRequest
0 голосов
/ 21 марта 2010

Я программист PHP.У меня нет опыта программирования в .Net (последний раз его видели 4 года назад).Не интересует модель с выделенным кодом, так как это быстрый временный взлом.

Я пытаюсь создать файл output.txt всякий раз, когда пользователь отправляет новые данные.Таким образом, файл output.txt, если он существует, должен быть заменен новым.

Я хочу записать данные в этом формате:

123|Java Programmer|2010-01-01|2010-02-03
124|VB Programmer|2010-01-01|2010-02-03
125|.Net Programmer|2010-01-01|2010-02-03

Я не знаю VB, поэтому не уверен насчет строковых манипуляций.Надеюсь, что добрая душа поможет мне с этим.Я буду вам благодарен.Спасибо:)

<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script language="vb" runat="server">
  sub Page_Load(sender as Object, e as EventArgs)

  Dim sqlConn As New SqlConnection("Data Source=winsqlus04.1and1.com;Initial Catalog=db28765269;User Id=dbo2765469;Password=ByhgstfH;") 
  Dim myCommand As SqlCommand
  Dim dr As SqlDataReader

  Dim FILENAME as String = Server.MapPath("Output4.txt")

    Dim objStreamWriter as StreamWriter
   ' If Len(Dir$(FILENAME)) > 0 Then Kill(FILENAME)
    objStreamWriter = File.AppendText(FILENAME)

   Try
   sqlConn.Open()
   'opening the connection
   myCommand = New SqlCommand("SELECT  id, title, CONVERT(varchar(10), expirydate, 120) AS [expirydate],CONVERT(varchar(10), creationdate, 120) AS [createdate] from tblContact where flag = 0 AND ACTIVE = 1", sqlConn)
  'executing the command and assigning it to connection 
  dr = myCommand.ExecuteReader()

  While dr.Read()

    objStreamWriter.WriteLine("JobID: " & dr(0).ToString())
    objStreamWriter.WriteLine("JobID: " & dr(2).ToString())
    objStreamWriter.WriteLine("JobID: " & dr(3).ToString())

  End While
  dr.Close()
  sqlConn.Close()
  Catch x As Exception
  End Try

    objStreamWriter.Close()

    Dim objStreamReader as StreamReader
    objStreamReader = File.OpenText(FILENAME)

    Dim contents as String = objStreamReader.ReadToEnd()

    lblNicerOutput.Text = contents.Replace(vbCrLf, "<br>")

    objStreamReader.Close()
  end sub
</script>

<asp:label runat="server" id="lblNicerOutput" Font-Name="Verdana" />

1 Ответ

1 голос
/ 21 марта 2010

Вы можете использовать .Net Композитное форматирование функция:

objStreamWriter.WriteLine("{0}|{1}|{2:yyyy-MM-dd}|{3:yyyy-MM-dd}", _
                          dr(0),  dr(1), dr(2), dr(3))

Некоторые примечания к вашему текущему коду:

  • ( EDIT ) У вас есть пустой блок Catch (Catch x As Exception End Try), который молча проглатывает любые ошибки. Вы должны никогда делать это.
  • Венгерская запись не одобряется. Ваш objStreamWriter будет лучше назван writer или fileWriter.
  • Вам не нужно конвертировать даты в VARCHAR s на сервере; вы можете вывести их в этом формате, используя строку формата даты и времени yyyy-MM-dd (как в моем примере или как dateTime.ToString("yyyy-MM-dd")
  • File.AppendText добавится к существующему файлу. Вы уверены, что не хотите звонить File.CreateText, который автоматически удалит файл, если он уже существует?
  • Вы должны закрыть свои объекты, используя оператор Using , например:

Using objStreamWriter As StreamWriter = File.AppendText(FILENAME)
    ...
End Using
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...