2015-03-24 13 views
0

У меня есть визуальный основной textBox1 с String [] массива строк (выход из Powershell скрипт), как этот образецКак я могу вставить массив текстовых полей в базу данных?

3.50 
12.59 
21.34 
31.20 
3.80 
12.72 
21.60 
33.43 
3.21 
12.08 
21.30 
33.02

мне нужно разделить эти значения от каждой 4 строки и вставить в базу данных, как

ResultA ResultB ResultC ResultD 
Test1 3.50 12.59 21.34 31.20

Test2 3.80 12.72 21.60 33.43

Test3 3.21 12.08 21.30 33.02

также, если у меня больше строки в текстовом поле 16,20 или более разделены на 4 строки и помогут мне вставить в таблицу базы данных. благодаря

ответ

0

Я не знаком с VB, но в C# вы можете сделать это:

var yourArray = new string[40]; 
string resA = null, resB = null, resC = null, resD = null; 

for(var i = 0; i<yourArray.Length; i+=4) 
{ 
    resA = yourArray[i]; 
    if(i+1 < yourArray.Length) 
     resB = yourArray[i+1]; 
    if(i+2 < yourArray.Length) 
     resC = yourArray[i+2]; 
    if(i+3 < yourArray.Length) 
     resD = yourArray[i+3]; 

    /// insert these values to db 
} 
0

Пока не ясно, то ли вы не знаете, как вставить что-то в вашу базу данных или вы не знаете, как разделить текст на VB.NET. Я предполагаю последнее, иначе вопрос слишком широк и не содержит достаточной информации.

Однако, я бы первым реализовать собственный класс, чтобы держать всю вашу информацию:

Public Class NumberResults 
    Public Sub New(number As Int32, description As String, resA As Decimal, resB As Decimal, resC As Decimal, resD As Decimal) 
     Me.Number = number 
     Me.Description = description 
     Me.ResultA = resA 
     Me.ResultB = resB 
     Me.ResultC = resC 
     Me.ResultD = resD 
    End Sub 

    Public Property Number As Int32 
    Public Property Description As String 
    Public Property ResultA As Decimal 
    Public Property ResultB As Decimal 
    Public Property ResultC As Decimal 
    Public Property ResultD As Decimal 

    Public Overrides Function ToString() As String 
     Return String.Format("{0} {1} {2} {3} {4}", Description, ResultA, ResultB, ResultC, ResultD) 
    End Function 
End Class 

Затем вы можете использовать LINQ для выбора каждой группы из четырех линий разбираемых в десятичную системе. Если вы используете метод TryParse в запросе LINQ, вы должны использовать вспомогательный метод, который возвращает Nullable(Of T), который лучше, чем при использовании локальной переменной:

Вы могли бы эти:

Module StringExtensions 
    <Extension()> 
    Public Function TryGetInt32(Str As String) As Nullable(Of Int32) 
     If Str Is Nothing Then Return Nothing 
     Dim num As Int32 
     If Int32.TryParse(Str, num) Then Return num 
     Return Nothing 
    End Function 

    <Extension()> 
    Public Function TryGetIntDecimal(Str As String, Optional provider As IFormatProvider = Nothing) As Nullable(Of Decimal) 
     If Str Is Nothing Then Return Nothing 
     Dim num As Decimal 
     If provider Is Nothing Then provider = Globalization.NumberFormatInfo.CurrentInfo 
     If Decimal.TryParse(Str, Globalization.NumberStyles.Any, provider, num) Then Return num 
     Return Nothing 
    End Function 
End Module 

Теперь вы получите все строки из текстовое поле, которое может быть разобрано на Decimal таким образом:

Dim numberLines = From line In TextBox1.Lines 
        Let numOrNull = line.TryGetIntDecimal(CultureInfo.InvariantCulture) 
        Where numOrNull.HasValue 
        Select numOrNull.Value 

Этот запрос LINQ отсрочена выполняется, что означает, что в настоящее время он является не оп. Вы можете взглянуть на значения в отладчике, он содержит все 12 строк в виде десятичных знаков. Теперь я использую его в этом запросе, который делает группировку, используя \= integer division operator:

Dim results = numberLines. 
    Select(Function(num, index) New With {.num = num, .index = index}). 
    GroupBy(Function(x) x.index \ 4). 
    Select(Function(grp, ix) New NumberResults(
       ix + 1, String.Format("Test{0}", ix + 1), 
       grp.Select(Function(x) x.num).First(), 
       grp.Select(Function(x) x.num).ElementAtOrDefault(1), 
       grp.Select(Function(x) x.num).ElementAtOrDefault(2), 
       grp.Select(Function(x) x.num).ElementAtOrDefault(3))) 

Запросы по-прежнему не выполняется, поэтому можно, например, использовать For Each, чтобы вставить их в базу данных:

For Each res In results 
    Console.WriteLine(res.ToString()) 
Next 

, который выводит (я использую запятую в качестве десятичного разделителя):

Test1 3,50 12,59 21,34 31,20 
Test2 3,80 12,72 21,60 33,43 
Test3 3,21 12,08 21,30 33,02 
Смежные вопросы