Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 请问如何优化数据加载_Sql Server_Vb.net - Fatal编程技术网

Sql server 请问如何优化数据加载

Sql server 请问如何优化数据加载,sql-server,vb.net,Sql Server,Vb.net,代码必须用来自SQL Server的数据填充数组。 然后将数组数据写入文件。 现在它可以工作了,但是否有可能优化我的“For to Next”。因为计数器可能非常大,而且这不是唯一要填充的数组 For i = 0 To Counter Dim PR = (SQL.RunReader("SELECT Requirement FROM Programme_Requirements JOIN Specialities ON Specialities.Id_Speciality=Programme_Re

代码必须用来自SQL Server的数据填充数组。 然后将数组数据写入文件。 现在它可以工作了,但是否有可能优化我的“For to Next”。因为计数器可能非常大,而且这不是唯一要填充的数组

For i = 0 To Counter
Dim PR = (SQL.RunReader("SELECT Requirement FROM Programme_Requirements
JOIN Specialities ON Specialities.Id_Speciality=Programme_Requirements.Id_Speciality AND Specialities.SpecialityName='" & SpecialityName(i) &
"' JOIN Educational_Levels ON Educational_Levels.Id_EducationalLevel=Programme_Requirements.Id_EducationalLevel AND 
Educational_Levels.EducationalLevel ='" & DocumentTypeId(i) &
"' JOIN Forms_of_Study ON Forms_of_Study.Id_FormofStudy=Programme_Requirements.Id_FormofStudy AND 
Forms_of_Study.FormofStudyName ='" & EducationFormName(i) & "'", "Requirement"))
Next

不确定RunReader中发生了什么,但请尝试以下操作

Private Sub ProcessArrays()
        Dim strSQL =
        "SELECT Requirement FROM Programme_Requirements
        JOIN Specialities ON Specialities.Id_Speciality=Programme_Requirements.Id_Speciality 
        JOIN Educational_Levels ON Educational_Levels.Id_EducationalLevel=Programme_Requirements.Id_EducationalLevel 
        JOIN Forms_of_Study ON Forms_of_Study.Id_FormofStudy=Programme_Requirements.Id_FormofStudy 
        WHERE  Specialities.SpecialityName= @SpecialtyName
        AND 
        Educational_Levels.EducationalLevel = @DocumentType
        AND 
        Forms_of_Study.FormofStudyName = @EducationFormName;"
        Using cn As New SqlConnection("Your connection string")
            Using cmd As New SqlCommand(strSQL, cn)
                cn.Open()
                For i As Integer = 0 To Counter
                    cmd.Parameters.Add("@SpecialtyName", SqlDbType.VarChar).Value = SpecialtyName(i)
                    cmd.Parameters.Add("@DocumentName", SqlDbType.VarChar).Value = DocumentTypeId(i)
                    cmd.Parameters.Add("@EducationFormName", SqlDbType.VarChar).Value = EducationFormName(i)
                    Using dr As SqlDataReader = cmd.ExecuteReader
                        'Use reader values
                    End Using
                Next
            End Using
        End Using
    End Sub

您能添加一些示例数据吗?请学习如何参数化您的查询。SQL注入不是你的朋友。这个问题太宽泛了。您可以从数组中创建临时表,并将查询连接到临时表-您不必为循环保存
,但总体性能可能会更好。在我看来,您的几个连接子句中有属于Where子句的部分。感谢您的帮助!我也使用参数。我的问题更多的是“我可以使用一些东西来不连接我的数据库这么多次吗?”因为现在我有6个数组(如'PR()'),使用从另一个数组(如'SpecialityName()')获得的信息从数据库填充,计数器转到2000,所以我现在使用阅读器12000次。我想我做错了,这就是为什么我问上面的代码,连接在循环外只打开一次。只有一个到数据库的连接。