2017-12-21 4 views
0

직접 쿼리와 저장 프로 시저간에 차이가 있습니까?직접 쿼리와 vb.net의 저장 프로 시저의 차이

[다음]

지금 나도 몰라 내가 회사에 사용 7개월이야, 나는이 쿼리를 사용하여 .NET 응용 프로그램에서 Select*Update*deleteInsert을 사용하기 때문에 나는 6 년 동안이 쿼리를 가지고있는 이 무엇이든지 상점 절차 또는 직접 쿼리 또는했지만 출력이 나는 그것이 querys를 만들에 올 때 할 수있는 최선의 방법이 무엇인지 알고 싶어 같은

<WebMethod()> _ 
    Public Function add(ByVal firstname As String, ByVal lastname As String) 


     Dim con As SqlConnection 
     Dim com As SqlCommand 

     con = New SqlConnection(cstring) 
     con.Open() 
     com = New SqlCommand("SELCT * FROM NewSalestbl where Firstname = @Firstname and Lastname= @Lastname", con) 

     com.Parameters.AddWithValue("@Firstname", firstname) 
     com.Parameters.AddWithValue("@Lastname", lastname) 
     Dim reader As SqlDataReader = com.ExecuteReader 
     While reader.Read 
      status = reader("Lastname").ToString 
     End While 

     MsgBox("Inserted") 

     con.Close() 

     Return status 

    End Function 

경우는 호출? [아래]

이 코드를 사용하려고

지금

이 가
Dim con As SqlConnection 
    Dim com As New SqlCommand 
    con = New SqlConnection(cstring) 
    con.Open() 
    com.CommandText = "searchtest" 
    com.CommandType = CommandType.StoredProcedure 
    com.Connection = con 
    com.Parameters.AddWithValue("@firstname", TextBox1.Text) 
    Dim raeder As SqlDataReader 
    raeder = com.ExecuteReader 
    While raeder.Read 
     MsgBox(raeder(1)) 
    End While 

이 두 가지 예는 TIA

답변

1

동일하거나하지 않으면 누군가가 나에게 이것을 설명 할 수있는 직접 SQL이 좋다 더 휴대하기 편리합니다. SQL Server에서 다른 데이터베이스로 이동 하시겠습니까? 프로그램에서 텍스트를 변경하면 데이터베이스에 액세스 할 필요가 없습니다. 조직에서 저장 프로 시저를 만들지 못하게하는 경우에도 유용합니다. 한 사람의 손에있는 모든 DB 액세스, 다른 사람의 모든 데스크탑/웹 코드)

저장 프로 시저가 컴파일되어있어 좋았습니다. 간단한 쿼리의 경우에는별로 중요하지 않을 수 있지만, 더 길게는 다중 명령문 쿼리의 경우 가능합니다. 쿼리에 오류가있는 경우 서버의 한 위치에서 변경합니다. 12 개의 데스크톱에 새로운 실행 파일을 배포 할 필요가 없습니다.

대답은 두 가지 모두 테스트 성능입니다. 중요한 차이가 없다면 유지 관리를 가장 번거롭게 만드는 기준에 따라 선택해야합니다.

나는 절차를 선호하지만 상황은 다양 할 수 있습니다.

+0

프로그래머가/회사에 고용되어 있으면 코드를 수정할 수 있고 저장 프로 시저가 좋은 장소에 쿼리를 유지한다는 측면에서 좋은 쿼리라고 생각합니다. –

+1

매개 변수 .AddWithValue에는 고유 한 문제가 있습니다. ADO.net은 원하는 데이터 형식을 추측해야합니다. 세계화됨에 따라 ADO는 TextBox1.Text에 대해 nvarchar를 선택합니다. 오래 전에 생성 된 데이터베이스는 변경되지 않으며 FirstName 열은 varchar입니다. 이제 데이터베이스가 데이터 손실 위험에 빠져서 모든 행이 nvarchar에 맞게 넓어졌습니다. 우리의 쿼리 속도를 높이기 위해 그렇게하는 훌륭한 인덱스는 쓸모 없게되고 LastName에 도달하지도 않았습니다. 간단한 .. cmd.Parameters.Add ("@ FirstName", SqlDbType.VarChar, 100) .Value = Text1.Text – Mary

+0

@Mary는 nvarchar 및 varchar가 시스템 입력 값에 영향을 미칠 수 있습니까? 난 그냥 nvarchar 정상적인 입력으로 사용할 수있는 방법을 알고 varchar는 차량의 번호판 번호와 같은 입력에 사용하실 수 있습니다 sugesting을 사용하여 주셔서 감사합니다. 재산을 추가 : D –