복붙노트

[SQL] SQL 문에서 ASP 변수를 사용하는 방법

SQL

SQL 문에서 ASP 변수를 사용하는 방법

<%
postit = request.querystring("thispost")
response.write(postit)
%> 

포스트 - 변수이다. Response.Write를 작품이 모두 아래의 SQL 문 이상입니다.

나는이 오류 메시지가 얻을 포스트 - 그것 변수를 추가 할 때 그러나 SQL이다 :

delCmd.CommandText="DELETE * FROM post WHERE (pos_ID = postit )"
Microsoft Access Database Engine error '80040e10'
No value given for one or more required parameters. 
/student/s0190204/wip/deleterecord.asp, line 32

해결법

  1. ==============================

    1.는 SQL에 매개 변수를 추가합니다 :

    는 SQL에 매개 변수를 추가합니다 :

    delCmd.CommandText="DELETE * FROM post WHERE (pos_ID = ?)"
    delCmd.Parameters.Append delCmd.CreateParameter("posid", adInteger, adParamInput)   ' input parameter
    delCmd.Parameters("posid").Value = postit
    
  2. ==============================

    2.미래에 도움이 될 것입니다 것들의 커플

    미래에 도움이 될 것입니다 것들의 커플

    (가정 이미 글로벌 설정 호출 gs_connstr에 저장된 연결 문자열을) 아래의 예에서 시연 될 예정 코드에서의 ADODB.Command 개체를 사용하는 경우 물건을 빠르게 할 수있는 몇 가지 팁이있다;

    <%
    Option Explicit
    
    Dim postit
    postit = Request.QueryString("thispost")
    'Always do some basic validation of your Request variables
    If Len(postit) > 0 And IsNumeric(postit) Then CLng(postit) Else postit = 0
    
    Dim o_cmd, o_rs, a_rs, i_row, i_rows, l_affected
    Dim SQL
    
    'SQL statement to be executed. For CommandType adCmdText this can be any dynamic
    'statement, but adCmdText also gives you an added bonus - Parameterised Queries
    'instead of concatenating values into your SQL you can specify placeholders (?)
    'that you will define values for that will get passed to the provider in the order
    'they are defined in the SQL statement.
    SQL = "DELETE * FROM post WHERE (pos_ID = ?)"
    
    Set o_cmd = Server.CreateObject("ADODB.Command")
    With o_cmd
      'ActiveConnection will accept a Connection String so there is no need
      'to instantiate a separate ADODB.Connection object the ADODB.Command object
      'will handle this and also open the connection ready.
      .ActiveConnection = gs_connstr
      .CommandType = adCmdText
      .CommandText = SQL
      'When using Parameters the most important thing to remember is the order you
      'appended your parameters to the Parameters collection as this will determine
      'the order in which they are applied to your SQL query at execution. Because
      'of this the name you give to your parameters is not important in terms of
      'execution but I find specifying a meaningful name is best (especially when
      'revisiting some code a few years down the line).
      Call .Parameters.Append(.CreateParameter("@pos_ID", adInteger, adParamInput, 4))
      'Parameter values can be passed in via the Execute() method using an Array
      'without having to define the parameter values explicitly. You can also specify
      'the records affected value to return number of rows affected by a DELETE,
      'INSERT or UPDATE statement.
      .Execute(l_affected, Array(postit))
    End With
    'Always tidy up after yourself, by releasing your object from memory, this will
    'also tidy up your connection as it was created by the ADODB.Command object.
    Set o_cmd = Nothing
    %>
    
  3. ==============================

    3.이 코드를보십시오 :

    이 코드를보십시오 :

    <% Dim postit, stringSQL, objectCon
       postit = request.querystring("thispost")
    
       Set objectCon = Server.CreateObject("ADODB.Connection")
       objectCon.ConnectionString  "Driver={SQL SERVER};Server=server_name;UID=user_name;PWD=password;Database=database_name" 'SET CONNECTION STRING OF YOUR DATABASE
       stringSQL = "DELETE FROM post WHERE pos_id='" & postit & "'"
    
       objectCon.Open
       objectCon.Execute(stringSQL)
       objectCon.Close() %>
    
  4. ==============================

    4.당신은 액세스에 포스트 - 그것의 값을 전달하지 않는; 대신, 당신은 찾을 수 및 포스트 - 그것라는 변수를 사용하여 액세스를 말하는 것입니다. 그것은 단지 당신의 코드에 존재하는 - 물론, 액세스에 존재하지 않는 변수가 말했다. 수정은 인용 부호의 부부와 앰퍼샌드 한 쌍이다.

    당신은 액세스에 포스트 - 그것의 값을 전달하지 않는; 대신, 당신은 찾을 수 및 포스트 - 그것라는 변수를 사용하여 액세스를 말하는 것입니다. 그것은 단지 당신의 코드에 존재하는 - 물론, 액세스에 존재하지 않는 변수가 말했다. 수정은 인용 부호의 부부와 앰퍼샌드 한 쌍이다.

    delCmd.CommandText="DELETE * FROM post WHERE (pos_ID = " & postit & " )"
    

    (당신이 당신의 데이터베이스에 퇴장 가기 전에 당연히, 당신은 포스트 - 그것을 확인해야합니다. 간단한 CDbl에는 ()를 트릭을 할 수는 숫자 값입니다 가정.)

  5. ==============================

    5.레코드를 확인해야하지 않을 경우 더 쉽게 삭제를 들어,이 방법은 유용하다 :

    레코드를 확인해야하지 않을 경우 더 쉽게 삭제를 들어,이 방법은 유용하다 :

    cn.open "yourconnectionstring"
    cn.execute "DELETE * FROM post WHERE pos_ID = " & request.querystring("thispost")
    cn.close
    
  6. from https://stackoverflow.com/questions/20659972/how-to-use-asp-variables-in-sql-statement by cc-by-sa and MIT license