我正在嘗試獲取startsWth的字串值。目前,它的輸出是布林值。如何在我的 SQL 資料庫中顯示字串而不是 True/False?
Protected Sub Read(sender As Object, e As EventArgs)
Dim lines As String() = File.ReadAllLines(Server.MapPath("~/File.txt"))
For i As Integer = 0 To lines.Length - 1
Dim file As String = Convert.ToString(lines(i))
Dim Title As String = lines(i).StartsWith("123")
Insert(Title)
Next
End Sub
Public Sub Insert(Record As String)
Using con As New SqlConnection(con)
Dim query As String = ""
Dim Title As String = Record.StartsWith("123")
Using cmd As New SqlCommand("INSERT INTO Test (Title) VALUES (@Title)")
cmd.Parameters.AddWithValue("@Title", Title.ToString())
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
End Sub
uj5u.com熱心網友回復:
Protected Sub Read(sender As Object, e As EventArgs)
Dim lines As String() = File.ReadAllLines(Server.MapPath("~/File.txt"))
For i As Integer = 0 To lines.Length - 1
Dim Title As String = lines(i)
If Title.StartsWith("123") Then
Insert(Title)
End
Next
End Sub
Public Sub Insert(Title As String)
Using con As New SqlConnection(con)
Using cmd As New SqlCommand("INSERT INTO Test (Title) VALUES (@Title)")
cmd.Parameters.AddWithValue("@Title", Title)
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
End Sub
uj5u.com熱心網友回復:
如果你想創建一個匹配行的串列,Linq 非常擅長這種事情。
Dim lines = File.ReadAllLines(Server.MapPath("~/File.txt"))
Dim matching = lines.Where(Function(line) line.StartsWith("123"))
這將創建一個以“123”開頭的可列舉行序列。如果您想進行額外的處理,您可以將 a 鏈接Select到此,例如
Dim matching = lines.Where(Function(line) line.StartsWith("123")) _
.Select(Function(item) PostProcess(item))
(或者我認為你可以使用AddressOf這種情況,你只想直接呼叫一個函式,而不是做簡單的行內處理)
uj5u.com熱心網友回復:
這應該可以做到,并且還可以使代碼更快,記憶體效率更高。
Protected Sub Read(sender As Object, e As EventArgs)
Dim lines = File.ReadLines(Server.MapPath("~/File.txt")).
Where(Function(line) line.StartsWith("123"))
Insert(lines)
End Sub
Public Sub Insert(Titles As IEnumerable(Of String))
Dim query As String = "INSERT INTO Test (Title) VALUES (@Title)"
Using con As New SqlConnection(con), _
cmd As New SqlCommand(query, con)
' Use the actual column type and length here
cmd.Parameters.Add("@Title", SqlDbType.NVarChar, 100)
con.Open()
For Each title As String In Titles
cmd.Parameters("@Title").Value = title
cmd.ExecuteNonQuery()
Next
End Using
End Sub
注意ReadLines()vs ReadAllLines(),它將節省記憶體,并注意該Insert()方法現在如何接受整個集合,因此我們只需要一個命令/連接在一個更緊密的回圈中。
但我也看到關于需要更多列的另一個答案的評論。在這種情況下,您還應該定義一個類來封裝您需要的列,并為每列提供一個屬性。然后向類添加一個靜態/共享方法來決議來自字串輸入的資料。這假設檔案中的每一行都是完整的記錄:
Public Class MyData
Public Property Title As String
Public Property Field2 As DateTime
' ...
Public Property FieldN As String
' Of course, use better names than this
Public Shared Function Parse(input As String) As MyData
Return New MyData() With {
' Use things like RegEx, String functions,
' or CSV/JSON parsers here to get the
' fields you need from the string
}
End Function
End Class
一旦你有了這個類,前面的代碼Read()和Insert()代碼會改變如下:
Protected Sub Read(sender As Object, e As EventArgs)
Dim records = File.ReadLines(Server.MapPath("~/File.txt")).
Where(Function(line) line.StartsWith("123")).
Select(Function(line) MyData.Parse(line))
Insert(records)
End Sub
Public Sub Insert(Records As IEnumerable(Of MyData))
Dim query As String = "INSERT INTO Test (Title, Field2, FieldN) VALUES (@Title, @Field2, @FieldN)"
Using con As New SqlConnection(con), _
cmd As New SqlCommand(query, con)
' Use the actual column type and length here
cmd.Parameters.Add("@Title", SqlDbType.NVarChar, 100)
cmd.Parameters.Add("@Field2", SqlDbType.DateTime)
cmd.Parameters.Add("@FieldN", SqlDbType.NVarChar, 20)
con.Open()
For Each record As MyData In Records
cmd.Parameters("@Title").Value = record.Title
cmd.Parameters("@Field2").Value = record.Field2
cmd.Parameters("@FieldN").Value = record.FieldN
cmd.ExecuteNonQuery()
Next
End Using
End Sub
如果檔案中的每一行都不是一條完整的記錄,并且記錄分布在幾行中,則需要更改Read()方法以首先知道記錄的開始和停止位置,并能夠將完整記錄的資料傳遞到一個時間到你的Parse()或Create()方法。
檔案的格式也很可能存在現有的通用決議器(如 INI、JSON、XML 等),并且在這種情況下始終使用現有的決議器。現有的決議器往往會有更少的錯誤(尤其是在邊緣情況下)。即使一開始設定它可能會令人生畏,但開始作業對您來說將減少作業量。它們將減少您撰寫和維護的代碼。而且它們也往往會更快、更高效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/490839.html
標籤:VB.net
上一篇:div元素內的消失錯誤訊息
