2014-12-19 3 views
3

다음 코드를 사용하여 매개 변수화 된 일부 값을 SQL 테이블에 추가하고 있습니다. 내 Paramitized SQL에매개 변수화 된 SQL 내 하위 쿼리

SELECT RIGHT(CLI, LEN(CLI) - 1) 

가 어떻게 하위 쿼리를 포함하는 문자열의 첫 번째 문자를 절단하는 하위 쿼리를 사용하려는 @CLI 값

'--Connect to datasource 
Dim SqlconnectionString As String = "server=inlt01\SQLEXPRESS; database=DaisyServices; integrated security=yes" 

'--Import selected file to Billing table and Master Services 
Dim strSql As String = "INSERT INTO [" + FileNameOnly + "] (Site,CLI,FromDate,ToDate,Quantity,UnitCost,TotalCost,[Description],[User],Department,Filenameonly,billingmonth) VALUES (@Site,@CLI,@FromDate,@ToDate,@Quantity,@UnitCost,@TotalCost,@Description,@User,@Department,@filenameonly,(SELECT (CASE SUBSTRING(@filenameonly,1,3)WHEN 'Jan' THEN 1 WHEN 'Feb' THEN 2 WHEN 'Mar' THEN 3 WHEN 'Apr' THEN 4 WHEN 'May' THEN 5 WHEN 'Jun' THEN 6 WHEN 'Jul' THEN 7 WHEN 'Aug' THEN 8 WHEN 'Sep' THEN 9 WHEN 'Oct' THEN 10 WHEN 'Nov' THEN 11 WHEN 'Dec' THEN 12 END))); INSERT INTO [DaisyServicesMaster] (Site,CLI,FromDate,ToDate,Quantity,UnitCost,TotalCost,[Description],[User],Department,filenameonly,billingmonth) VALUES (@Site,@CLI,@FromDate,@ToDate,@Quantity,@UnitCost,@TotalCost,@Description,@User,@Department,@filenameonly,(SELECT (CASE SUBSTRING(@filenameonly,1,3)WHEN 'Jan' THEN 1 WHEN 'Feb' THEN 2 WHEN 'Mar' THEN 3 WHEN 'Apr' THEN 4 WHEN 'May' THEN 5 WHEN 'Jun' THEN 6 WHEN 'Jul' THEN 7 WHEN 'Aug' THEN 8 WHEN 'Sep' THEN 9 WHEN 'Oct' THEN 10 WHEN 'Nov' THEN 11 WHEN 'Dec' THEN 12 END)))" 

     Using connection As New SqlClient.SqlConnection(SqlconnectionString) 

     Dim cmd As New SqlClient.SqlCommand(strSql, connection) ' create command objects and add parameters 
     With cmd.Parameters 
        .Add("@Site", SqlDbType.VarChar, 30, "Site") 
        .Add("@CLI", SqlDbType.VarChar, 30, "CLI") 
        .Add("@FromDate", SqlDbType.Date, 30, "FromDate") 
        .Add("@ToDate", SqlDbType.Date, 30, "ToDate") 
        .Add("@Quantity", SqlDbType.Int, 3, "Quantity") 
        .Add("@UnitCost", SqlDbType.Float, 5, "UnitCost") 
        .Add("@TotalCost", SqlDbType.Float, 5, "TotalCost") 
        .Add("@Description", SqlDbType.VarChar, 100, "Description") 
        .Add("@User", SqlDbType.VarChar, 30, "User") 
        .Add("@Department", SqlDbType.VarChar, 30, "Department") 
        .AddWithValue("@filenameonly", FileNameOnly) 

     End With 

?

저는 VB 코딩에 새로운 것이므로, 많은 예제 코드를 제공해 주시면 감사하겠습니다.

+2

는 VB에서 그렇게하고 SQL에 추가 매개 변수로 전달 : 다음은 한 예입니다. 당신이 임베디드 SQL을 사용하고 있기 때문에 VB에서 SQL 대신 그렇게 할 이유가 없습니다. vb를 사용하십시오 : 더 쉽고 빠르며 깨끗합니다. – Paolo

답변

2

코드를 매개 변수로 전달할 수 없습니다. 매개 변수화 된 쿼리의 목적은 SQL 주입 공격으로부터 보호하기 위해 매개 변수를 통해 코드가 전달되는 것을 방지하는 것입니다.

  1. 이 매개 변수
  2. 매개 변수가 전달 된 후 값을 자르기로 전달하기 전에 값을 잘라 내기 :

    원하는 결과를 달성하기 위해 두 가지 방법이 있습니다. 당신이 대신 저장 프로 시저에 코드를 넣어이 저장 프로 시저를 호출, 매개 변수화 된 쿼리를 사용하는 것이 좋습니다

    Dim strSql As String = "INSERT INTO [" + FileNameOnly + "] (Site,CLI,FromDate,ToDate,Quantity,UnitCost,TotalCost,[Description],[User],Department,Filenameonly,billingmonth) VALUES (@Site,RIGHT(@CLI, LEN(@CLI) - 1),@FromDate,@ToDate,@Quantity,@UnitCost,@TotalCost,@Description,@User,@Department,@filenameonly,(SELECT (CASE SUBSTRING(@filenameonly,1,3)WHEN 'Jan' THEN 1 WHEN 'Feb' THEN 2 WHEN 'Mar' THEN 3 WHEN 'Apr' THEN 4 WHEN 'May' THEN 5 WHEN 'Jun' THEN 6 WHEN 'Jul' THEN 7 WHEN 'Aug' THEN 8 WHEN 'Sep' THEN 9 WHEN 'Oct' THEN 10 WHEN 'Nov' THEN 11 WHEN 'Dec' THEN 12 END))); INSERT INTO [DaisyServicesMaster] (Site,CLI,FromDate,ToDate,Quantity,UnitCost,TotalCost,[Description],[User],Department,filenameonly,billingmonth) VALUES (@Site,RIGHT(@CLI, LEN(@CLI) - 1),@FromDate,@ToDate,@Quantity,@UnitCost,@TotalCost,@Description,@User,@Department,@filenameonly,(SELECT (CASE SUBSTRING(@filenameonly,1,3)WHEN 'Jan' THEN 1 WHEN 'Feb' THEN 2 WHEN 'Mar' THEN 3 WHEN 'Apr' THEN 4 WHEN 'May' THEN 5 WHEN 'Jun' THEN 6 WHEN 'Jul' THEN 7 WHEN 'Aug' THEN 8 WHEN 'Sep' THEN 9 WHEN 'Oct' THEN 10 WHEN 'Nov' THEN 11 WHEN 'Dec' THEN 12 END)))" 
    

    하나의 옵션 :

는 후자는 다음에 SQL 코드를 변경 의미 매개 변수가있는. 데이터베이스 응용 프로그램에서는 CRUD 저장 프로 시저 (Create, Read, Update, Delete)를 사용하는 것이 일반적입니다. 테이블 구조에서 기본 템플릿을 생성하는 스크립트도 있습니다.

http://www.sqlbook.com/SQL-Server/Auto-generate-CRUD-Stored-Procedures-40.aspx

+1

정말 고마워, 잘린 후 완벽하게 작동합니다 :) – user3580480

관련 문제