如何使用VB.NET在SQL中插入数组值 [英] How to insert array values in SQL using VB.NET

查看:102
本文介绍了如何使用VB.NET在SQL中插入数组值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在sql表中逐个插入数组值。例如

我的数组值是= {1,2,3}。我想插入

1

2

3

在表格中。

但在我的程序中执行

1

1

2



我尝试了什么:



我的代码是

使用GridSalaryCategoryADFormula 
对于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))<> 然后
Dim FormulaSids()As String
FormulaSids = .TextMatrix(intRow,.GetColIndex(FormulaSids))。Split(,)
For Fsid = 0 To FormulaSids。长度 - 1
objCmd.Parameters.AddWithValue(@ Fid,Val(FormulaSids(Fsid)))
objCmd.ExecuteNonQuery()
下一个
否则
objCmd .Parameters.AddWithValue(@ Fid,0)
objCmd.ExecuteNonQuery()
结束如果

下一个





这里公式sid的值为1,2当第一次正确执行第二次公式sid已创建2次所以它显示错误

SP有太多的参数

如何清除以前的sql参数值

解决方案

你可以清除内循环中的参数在该循环中设置所有参数

 使用 GridSalaryCategoryADFormula 
对于 intRow 作为 整数 = < span class =code-digit> 1 To .Rows - 1
objCmd.Parameters.Clear()
CreateParameters(objCmd,GridSalaryCategoryADFormula, True ,intRow)
objCmd.Parameters.AddWithValue( @ SID,dblSID)
如果 .TextMatrix(intRow,.GetColIndex( Fid))<> 然后
< span class =code-keyword> Dim FormulaSids() As String
FormulaSids = .TextMatrix(intRow,.GetColIndex( FormulaSids))。Split(
对于 Fsid = 0 FormulaSids.Length - 1
objCmd.Parameters.Clear()
' 所有参数都需要添加在这里!

objCmd.Parameters.AddWithValue( @ Fid,Val(FormulaSids(Fs id)))
objCmd.ExecuteNonQuery()
下一步
其他
objCmd.Parameters.AddWithValue( @ Fid 0
objCmd.ExecuteNonQuery()
结束 如果
下一步

或者您可以使用 SqlParameterCollection.RemoveAt Method [ ^ ]

 使用 GridSalaryCategoryADFormula 
For intRow As Integer = 1 。行 - 1
objCmd.Parameters.Clear()
CreateParameters(objCmd,GridSalaryCategoryADFormula, True ,intRow)
objCmd.Parameters.AddWithValue( @ SID,dblSID)
如果 .TextMatrix(intRow,.GetColIndex( Fid))<> 然后
< span class =code-keyword> Dim FormulaSids() As String
FormulaSids = .TextMatrix(intRow,.GetColIndex( FormulaSids))。Split(
objCmd.Parameters.AddWithValue( @ Fid 0 ' 在我们使用RemoveAt时停止错误
对于 Fsid = 0 FormulaSids.Length - 1
objCmd.Parameters.RemoveAt( @ Fid
objCmd.Parameters.AddWithValue( @ Fid,Val(FormulaSids(Fsid)))
objCmd.ExecuteNonQuery()
下一步
否则
objCmd.Parameters.AddWithValue( @ Fid 0
objCmd.ExecuteNonQuery ()
结束 如果
下一步

或者您只需更改循环内的值,而不是每次添加参数

 使用 GridSalaryCategoryADFormula 
对于 intRow 作为 整数 = 1 .Rows - 1
objCmd.Parameters.Clear()
CreateParameters(objCmd,GridSalaryCategoryADFormula, True ,intRow)
objCmd.Parameters.AddWithValue( @ SID,dblSID)
如果 .TextMatrix(intRow,.GetColIndex( Fid))<> 然后
< span class =code-keyword> Dim FormulaSids() As String
FormulaSids = .TextMatrix(intRow,.GetColIndex( FormulaSids))。Split(
objCmd.Parameters.AddWithValue( @ Fid 0 ' 起点
对于 Fsid = 0 FormulaSids.Length - 1
objCmd.Parameters( @ Fid)。Value = Val(FormulaSids(Fsid)))
objCmd.ExecuteNonQuery()
下一步
其他
objCmd.Parameters.AddWithValue( @ Fid 0
objCmd.ExecuteNonQuery()
结束 如果
下一步


I want to insert Array values one by one in sql table.For example
My array value is ={1,2,3}.I want to insert
1
2
3
in table .
But in my program it executes
1
1
2

What I have tried:

My code is

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



Here Formula sid has values 1,2 When First time it executes correctly second time the Formula sid Has Created 2 times so it Shows an error
SP has Too Many Arguments
how to clear previous value of sql Parameter

解决方案

You could clear the parameters within the inner loop and set up all of the parameters within that loop

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

Or you could use the SqlParameterCollection.RemoveAt Method[^]

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

Or you could just change the value inside the loop instead of adding the parameter each time

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


这篇关于如何使用VB.NET在SQL中插入数组值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆