Чтение текстового файла затем разбиение его на части и хранение в SQL server VB .NET
Итак, у меня есть текстовый файл с расширением по умолчанию .txt. Вот настоящий файл. (Табуляция Разделена)
<pre>Item Description Rev Locator UOM Quantity 003R94662 Colotech Plus ANG.2.0.0 PC 8.00 004E13450 PLATEN CUSHION ANG.2.0.0 PC 1.00 004K02371 CUSHION ASSY-PLATEN ANG.2.0.0 PC 1.00 005R00712 DC5000 Cyan Developer ANG.2.0.0 PC 1.00 005R00713 DC5000 Magenta Developer ANG.2.0.0 PC 1.00
Мне нужно прочитать текстовый файл, а затем разделить его на 6 столбцов (Item, Description, Rev, Locator, UOM и Quantity), и когда он будет прочитан, а затем разделен, он должен храниться в моей таблице в sql server.
Спасибо за ваше внимание. У меня есть некоторый опыт работы с кодом, но я просто не знаком с работой с текстовыми файлами и с того, как начать. Я видел какой-то пример и пытался, но не смог получить правильные результаты.
Что я уже пробовал:
У меня есть кнопка для загрузки текстового файла.
Вот код, который я пробовал
<pre>Protected Sub ibtnTxtUpload_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Dim jsbldr As New StringBuilder Try If FileUpload1.HasFile Then Dim Extension As String = Path.GetExtension(FileUpload1.PostedFile.FileName) If Extension = ".txt" Then Dim Request_Val As String = "" Dim sFileName As String = FileUpload1.FileName Dim dv_ As New DataView : dv_ = TryCast(Session("dbCache_DataType"), DataView) dv = New DataView : dv = TryCast(Session("dbCache_FC_Template_ID"), DataView) Dim col As String() = dv.Table.Rows(0).Item(0).ToString.Split("|") 'Read Line in Text File Dim fileEntries As New ArrayList() If Not File.Exists(sFileName) Then Exit Sub End If Try ' Read the file into a list... Dim reader As StreamReader = New StreamReader(sFileName) fileEntries.Clear() Do Until reader.Peek = -1 'Until eof fileEntries.Add(reader.ReadLine) Loop reader.Close() Catch ex As Exception ' The file's empty. End Try ' Now we have the whole file in a list(Array) Dim Item As New ArrayList() Dim Description As New ArrayList() Dim Rev As New ArrayList() Dim Locator As New ArrayList() Dim UOM As New ArrayList() Dim Quantity As New ArrayList() For Each line As String In fileEntries If line.Substring(0, 5) <> "Index" Then If line.Substring(0, 7) <> "Cluster" Then line = line.Replace(" ", " ") 'space line = line.Replace(" ", " ") Dim parts() As String = Split(line, "\t") ' Add the data to your lists: Try Item.Add(parts(1)) Description.Add(parts(2)) Rev.Add(parts(3)) Locator.Add(parts(4)) UOM.Add(parts(5)) Quantity.Add(parts(6)) Catch ex As Exception ' If this fials, we're not where we want to be in the file anyway. End Try End If End If Next 'Execute SQL Stored Procedure Using cn As New SqlConnection(cls.strConnString) Using cmd As New SqlCommand() With cmd .CommandType = CommandType.StoredProcedure .CommandText = "USP_XML_SOH_ACCOUNT_MAINT" .Parameters.Add("@USR_ID", SqlDbType.VarChar, 30) : .Parameters("@USR_ID").Value = cls.GetUserName .Parameters.Add("@FILE_NAME", SqlDbType.VarChar, 255) : .Parameters("@FILE_NAME").Value = sFileName .Parameters.Add("@RET_VAL", SqlDbType.VarChar, 255) .Parameters("@RET_VAL").Direction = ParameterDirection.Output .Connection = cn cn.Open() .ExecuteNonQuery() Request_Val = .Parameters("@RET_VAL").Value.ToString End With End Using End Using Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Javascript", "<script>$(document).ready(function(){$('#grid-div').height(250);$.blockUI({message: 'Updating data...',css: {border: 'none',padding: '15px', width: '15%', left: '40%',backgroundColor: '#000','-webkit-border-radius': '10px','-moz-border-radius': '10px',opacity: .5,color: '#fff'}});setTimeout($.unblockUI, 2000); " & _ " $('#dialog-message').html('<table style=""border-style:hidden;""><tr><td style=""padding:5px;""> <img src=""images/gridview/check_circle_64x64.png""/></td><td>" & Request_Val.ToString & "</td></tr></table>');" & _ "$('div#dialog-message').dialog ({ my: 'center', at: 'center', of: window}).prev ().find ('.ui-dialog-titlebar-close').hide(); " & _ "var varCounter = 0; var varName = function(){ if(varCounter < 1){ varCounter++; $('#dialog-message').dialog('open'); } else {clearInterval(varName);}};setInterval(varName, 2000);}); </script>") Else jsbldr.Append("<script>") jsbldr.Append("$(document).ready(function(){") jsbldr.Append("$('div#dialog-message').dialog ({ my: 'center', at: 'center', of: window}).prev ().find ('.ui-dialog-titlebar-close').hide();") jsbldr.Append("$('#dialog-message').html('<table style=""border-style:hidden;""><tr><td style=""padding:5px;""> <img src=""images/gridview/exclamation_circle_64x64.png""/></td><td>Invalid file format, please use .xlsx excel file extention.</td></tr></table>');") jsbldr.Append("$('#dialog-message').dialog('open');") jsbldr.Append("});") jsbldr.Append("</script>") Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Javascript", jsbldr.ToString) End If End If Catch ex As Exception jsbldr.Append("<script>") jsbldr.Append("$(document).ready(function(){") jsbldr.Append("$('div#dialog-message').dialog ({ my: 'center', at: 'center', of: window}).prev ().find ('.ui-dialog-titlebar-close').hide();") jsbldr.Append("$('#dialog-message').html('<table style=""border-style:hidden;""><tr><td style=""padding:5px;""> <img src=""images/gridview/exclamation_circle_64x64.png""/></td><td>Uploading SOH Account file template encounter error, please check the file.</td></tr></table>');") jsbldr.Append("$('#dialog-message').dialog('open');") jsbldr.Append("});") jsbldr.Append("</script>") Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "Javascript", jsbldr.ToString) End Try End Sub
Laiju k
это файл в каком-то формате по умолчанию, например .txt/.docx -что ?
или мы можем использовать любые файлы .Пожалуйста, предоставьте больше информации, чтобы люди могли помочь.
Member 13661245
файл @laiju находится в формате по умолчанию .txt (текстовый документ)
PIEBALDconsult
Вы пробовали BCP ?
Member 13661245
Нет, я не знаком с BCP.
Maciej Los
Можете ли вы опубликовать точную форму ваших данных? Что такое разделитель (пробел или табуляция)?
Member 13661245
Привет, Я обновляю свой вопрос и примерные данные, которые я генерирую. Это текстовый файл с разделителями табуляций
Richard MacCutchan
Я объяснил, как это сделать, в вашем посте с тем же вопросом вчера.
Member 13661245
Да, я последовал вашему предложению, но все еще не получил правильного ответа. Я не могу загрузить свой текстовый файл.
Richard MacCutchan
Я не понимаю. В вашем вчерашнем посте был код, который загружал текстовый файл и разбивал каждую строку на отдельные поля. Почему вы не можете сделать это сейчас?
Member 13661245
да, у меня есть код, но, как я уже сказал, он не загружается в мою базу данных.
Richard MacCutchan
Ну, это не имеет никакого отношения к чтению текстовых файлов. Покажите нам код, который вы должны добавить в базу данных, и объясните, в чем заключается проблема.
Member 13661245
и именно по этой причине мой вопрос сейчас заключается в том, как хранить в базе данных sql server
Richard MacCutchan
Ну, вчера у вас тоже был какой-то SQL-код. Как я уже предлагал, пожалуйста, отредактируйте свой вопрос, покажите код, который у вас есть, и объясните, что именно не работает.
Member 13661245
Привет, Я обновляю свой вопрос, я также ставлю код, который я придумал. Сценарий заключается в том, что я просматриваю текстовый файл и нажимаю кнопку "Загрузить". Вся программа просто зависает. Я попытался поставить отладчик на кнопку click, но после загрузки файла программа просто повесила трубку.
Richard Deeming
Dim sFileName As String = FileUpload1.FileName If Not File.Exists(sFileName) Then Exit Sub End If
То
FileName
свойство возвращает путь - а иногда и просто имя - файла на клиенте.Ваш код работает на сервере Даже если у вас есть файл с тем же именем пути, он почти наверняка не будет содержать то же содержимое, что и на клиенте .
Может быть появиться для работы при отладке кода в Visual Studio. Но это только потому, что в данном конкретном случае клиент и сервер-это один и тот же компьютер. Как только вы развернете свой код на реальном сервере, ваш код никогда не будет работать.
Вы можете либо сохранить загруженный файл в путь на сервере, используя элемент управления загрузкой файлов.
SaveAs
метод; или вы можете прочитать содержимое загруженного файла непосредственно, используя FileContent
собственность.