You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中StartsWith返回布尔值 如何获取匹配前缀行存入SQL数据库

问题核心

StartsWith() 方法的返回值本身就是布尔类型,作用是判断字符串是否匹配指定前缀,永远不会返回匹配到的字符串内容。你当前代码的问题是只筛选了以"123"开头的行,没有对不同前缀的行做分类映射,也没有在匹配成功时取原始行内容赋值给对应字段。

示例文件内容
1238536666661563
5641516635635556
4565468564635161
7945652594517129
7895421634456144
字段映射规则
  • 以123开头的完整行内容,存入Title字段
  • 以456开头的完整行内容,存入Subtitle字段
  • 以789开头的完整行内容,存入Body字段
修复后代码

文件读取逻辑修改

你不需要从StartsWith()的返回值取内容,当判断结果为True时,当前被判断的原始行变量就是你要的完整字符串,直接赋值即可:

Protected Sub Read(sender As Object, e As EventArgs)
    Dim record As New MyData()
    ' 逐行读取文件内容
    For Each line As String In File.ReadLines(Server.MapPath("~/File.txt"))
        Dim currentLine = line.Trim()
        If String.IsNullOrWhiteSpace(currentLine) Then Continue For

        ' 按前缀匹配,匹配成功直接取当前行内容赋值
        If currentLine.StartsWith("123") Then
            record.Title = currentLine
        ElseIf currentLine.StartsWith("456") Then
            record.Subtitle = currentLine
        ElseIf currentLine.StartsWith("789") Then
            record.Body = currentLine
        End If
    Next
    ' 传入组装完成的记录执行插入
    Insert({record})
End Sub

数据库插入逻辑

原有插入逻辑不需要大幅修改,注意数据库连接字符串的变量名不要和SqlConnection对象重名即可,修正后代码:

Public Sub Insert(Records As IEnumerable(Of MyData))
    Dim query As String = "INSERT INTO Test (Title, Subtitle, Body) VALUES (@Title, @Subtitle, @Body)"
    ' 替换为你实际的连接字符串变量名,不要和连接对象同名
    Using con As New SqlConnection(YourConnectionString), 
          cmd As New SqlCommand(query, con)

        cmd.Parameters.Add("@Title", SqlDbType.NVarChar, 100)  
        cmd.Parameters.Add("@Subtitle", SqlDbType.NVarChar, 100)
        cmd.Parameters.Add("@Body", SqlDbType.NVarChar, 100)      

        con.Open()
        For Each record As MyData In Records
            cmd.Parameters("@Title").Value = If(record.Title, DBNull.Value)
            cmd.Parameters("@Subtitle").Value = If(record.Subtitle, DBNull.Value)
            cmd.Parameters("@Body").Value = If(record.Body, DBNull.Value)
            cmd.ExecuteNonQuery()
        Next
    End Using
End Sub
注意事项

当字段没有匹配到对应内容时,要赋值DBNull.Value而非空引用,避免SQL参数赋值报错。如果你的表字段不允许为空,可以提前加校验逻辑确保三个前缀的行都被匹配到再执行插入。

内容的提问来源于stack exchange,提问作者Martha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:57:18