Flower@12 Ответов: 1

Как вставить значения массива в SQL с помощью VB.NET


Я хочу, чтобы вставить значения массива в таблицу SQL.Например
Мое значение массива равно ={1,2,3}.Я хочу вставить
1
2
3
в таблице .
Но в моей программе он выполняется
1
1
2

Что я уже пробовал:

Мой код таков
With GridSalaryCategoryADFormula
           For intRow As Integer = 1 To .Rows - 1
               objCmd.Parameters.Clear()
               CreateParameters(objCmd, GridSalaryCategoryADFormula, True, intRow)
               objCmd.Parameters.AddWithValue("@SID", dblSID)
                                  If .TextMatrix(intRow, .GetColIndex("Fid")) <> "" Then
                   Dim FormulaSids() As String
                   FormulaSids = .TextMatrix(intRow, .GetColIndex("FormulaSids")).Split(",")
                   For Fsid = 0 To FormulaSids.Length - 1
                                                 objCmd.Parameters.AddWithValue("@Fid", Val(FormulaSids(Fsid)))
                               objCmd.ExecuteNonQuery()
                   Next
               Else
                   objCmd.Parameters.AddWithValue("@Fid", 0)
                   objCmd.ExecuteNonQuery()
               End If

           Next


Здесь формула sid имеет значения 1,2 когда в первый раз она выполняется правильно во второй раз формула sid была создана 2 раза поэтому она показывает ошибку
У СП слишком много аргументов
как очистить Предыдущее значение параметра sql

1 Ответов

Рейтинг:
6

CHill60

Вы можете очистить параметры внутри внутреннего цикла и настроить все параметров внутри этого цикла

With GridSalaryCategoryADFormula
    For intRow As Integer = 1 To .Rows - 1
        objCmd.Parameters.Clear()
        CreateParameters(objCmd, GridSalaryCategoryADFormula, True, intRow)
        objCmd.Parameters.AddWithValue("@SID", dblSID)
        If .TextMatrix(intRow, .GetColIndex("Fid")) <> "" Then
            Dim FormulaSids() As String
            FormulaSids = .TextMatrix(intRow, .GetColIndex("FormulaSids")).Split(",")
            For Fsid = 0 To FormulaSids.Length - 1
                objCmd.Parameters.Clear()
                'All of the parameters need to be added here! 
                objCmd.Parameters.AddWithValue("@Fid", Val(FormulaSids(Fsid)))
                objCmd.ExecuteNonQuery()
            Next
        Else
            objCmd.Parameters.AddWithValue("@Fid", 0)
            objCmd.ExecuteNonQuery()
        End If
    Next
Или вы могли бы использовать Коллекции sqlparametercollection.Метод RemoveAt[^]
With GridSalaryCategoryADFormula
    For intRow As Integer = 1 To .Rows - 1
        objCmd.Parameters.Clear()
        CreateParameters(objCmd, GridSalaryCategoryADFormula, True, intRow)
        objCmd.Parameters.AddWithValue("@SID", dblSID)
        If .TextMatrix(intRow, .GetColIndex("Fid")) <> "" Then
            Dim FormulaSids() As String
            FormulaSids = .TextMatrix(intRow, .GetColIndex("FormulaSids")).Split(",")
            objCmd.Parameters.AddWithValue("@Fid", 0) 'To stop an error when we use RemoveAt            
        For Fsid = 0 To FormulaSids.Length - 1
                objCmd.Parameters.RemoveAt("@Fid")
                objCmd.Parameters.AddWithValue("@Fid", Val(FormulaSids(Fsid)))
                objCmd.ExecuteNonQuery()
            Next
        Else
            objCmd.Parameters.AddWithValue("@Fid", 0)
            objCmd.ExecuteNonQuery()
        End If
    Next
Или вы можете просто изменить значение внутри цикла вместо того, чтобы добавлять параметр каждый раз
With GridSalaryCategoryADFormula
    For intRow As Integer = 1 To .Rows - 1
        objCmd.Parameters.Clear()
        CreateParameters(objCmd, GridSalaryCategoryADFormula, True, intRow)
        objCmd.Parameters.AddWithValue("@SID", dblSID)
        If .TextMatrix(intRow, .GetColIndex("Fid")) <> "" Then
            Dim FormulaSids() As String
            FormulaSids = .TextMatrix(intRow, .GetColIndex("FormulaSids")).Split(",")
            objCmd.Parameters.AddWithValue("@Fid", 0) 'Starting point
            For Fsid = 0 To FormulaSids.Length - 1
                objCmd.Parameters("@Fid").Value = Val(FormulaSids(Fsid)))                
                objCmd.ExecuteNonQuery()
            Next
        Else
            objCmd.Parameters.AddWithValue("@Fid", 0)
            objCmd.ExecuteNonQuery()
        End If
    Next


[no name]

Спасибо, сэр...

[no name]

Мне нужна еще одна помощь для сравнения, если значение Fsid уже существует в сетке

CHill60

Что такое сетка?
Если это практическое руководство взглянуть на принятые решения Практическое Руководство Найти Строку[^]
Если это Ан ASP.NET GridView тогда взгляните на поиск значения в таблице [^] (возможно, вам придется перевести с языка Си#)
Если это WPF, то посмотрите на Практические примеры WPF DataGrid[^]