Sql server 请问如何优化数据加载
代码必须用来自SQL Server的数据填充数组。 然后将数组数据写入文件。 现在它可以工作了,但是否有可能优化我的“For to Next”。因为计数器可能非常大,而且这不是唯一要填充的数组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
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次。我想我做错了,这就是为什么我问上面的代码,连接在循环外只打开一次。只有一个到数据库的连接。