2009-07-18 130 views
0

我面臨將下面的PHP SQL插入代碼轉換爲ASP的一些問題,我想在ASP中使用相同的概念,因爲它更靈活,不受ASP擁有關鍵字。ASP專家 - 需要幫助將此PHP代碼轉換爲ASP

不知道是否有人可以幫助ASP新手在這裏。

$table = 'tbluser'; 
$array = array (
     'name' => $name, 
     'email' => $email, 
     'ip' => $remoteIP 
     ); 
$newid = insert_query ($table, $array); 



    function insert_query ($table, $array) 
    { 
    global $mysql_errors; 
    $query = 'INSERT INTO ' . $table . ' '; 
    foreach ($array as $key => $value) 
    { 

     $fieldnamelist .= '' . '`' . $key . '`,'; 
     if ($value == 'now()') 
     { 
     $fieldvaluelist .= 'now(),'; 
     continue; 
     } 
     else 
     { 
     $fieldvaluelist .= '\'' . $value . '\','; 
     continue; 
     } 
    } 

    $fieldnamelist = substr ($fieldnamelist, 0, 0 - 1); 
    $fieldvaluelist = substr ($fieldvaluelist, 0, 0 - 1); 
    $query .= '' . '(' . $fieldnamelist . ') VALUES (' . $fieldvaluelist . ')'; 
    $result = mysql_query ($query); 
    if (!$result) 
    { 
     $message = 'Invalid query: ' . mysql_error() . '<br>'; 
     $message .= 'Whole query: ' . $query; 
    } 

    $id = mysql_insert_id(); 
    return $id; 
    } 

它是傳統的ASP。沒有選擇,公司仍然需要爲特定項目維護這一點。

主要的原因我想在ASP這個特定的代碼風格是因爲我不想要綁定到查詢數據庫的ASP風格(使用CMD等..)

通過與密鑰生成數組集合(表字段名)和值,然後轉換爲完整的sql字符串,我只需要運行.execute(sql),這意味着將來我可以更輕鬆地將項目轉換爲其他框架,而無需重寫插入/將數據更新到數據庫。

+2

ASP Classic or ASP.NET?這兩種技術是截然不同的,所以我需要知道哪一種技術可以幫助我。 – Eric 2009-07-19 18:03:47

回答

2

不完全一樣,但這裏有一些我在ASP經典網站中使用過的功能。
我認爲這應該是一個很好的學習起點。

Function AddUser(Name, Email, IP) 
    dim sqlstmt 
    sqlstmt = "INSERT INTO tbluser (Name, Email, IP)" 
    sqlstmt = sqlstmt & " values (?, ?, ?)" 
    call RunSQL(sqlstmt, array(_ 
     mp("@Name", adVarChar, 100, Name), _ 
     mp("@Email", adVarChar, 100, Email), _ 
     mp("@IP", adVarChar, 100, IP))) 
end Function 

Function RunSQL(strSqlStmt , params()) 
    On Error resume next 

    ''// Create the ADO objects 
    Dim cmd 
    Set cmd = server.createobject("ADODB.Command") 

    ''// Init the ADO objects & the stored proc parameters 
    cmd.ActiveConnection = GetConnectionString() 
    cmd.CommandText = strSqlStmt 
    cmd.CommandType = adCmdText 
    collectParams cmd, params 

    ''// Execute the query without returning a recordset 
    cmd.Execute , , adExecuteNoRecords 
    If err.number > 0 then 
     BuildErrorMessage() 
     exit function 
    end if 

    ''// Cleanup 
    Set cmd.ActiveConnection = Nothing 
    Set cmd = Nothing 

    Exit Function 

End Function 


Private Sub collectParams(cmd , argparams()) 
    Dim params , v 
    Dim i , l , u 

    params = argparams 


    For i = LBound(params) To UBound(params) 
     l = LBound(params(i)) 
     u = UBound(params(i)) 

     ''// Check for nulls. 
     If u - l = 3 Then 
      If VarType(params(i)(3)) = vbString Then 
       If params(i)(3) = "" then 
            v = null 
       else 
        v = params(i)(3) 
       end if 
      Else 
       v = params(i)(3) 
      End If 

     If params(i)(1) = adLongVarChar Then 
       Dim p ''// As New Parameter 
       Set p = cmd.CreateParameter(params(i)(0), params(i)(1), adParamInput) 
       p.Attributes = adParamLong + adParamSigned 
       If Not IsNull(v) Then 
        p.AppendChunk v 
        p.Size = Len(v) 
       Else 
        p.Value = v 
        p.Size = 10000 
       End If 
       cmd.Parameters.Append p 
      Else 
       cmd.Parameters.Append cmd.CreateParameter(params(i)(0), params(i)(1), adParamInput, params(i)(2), v) 
      End If 
     Else 
      RaiseError m_modName, "collectParams(...): incorrect # of parameters" 
     End If 
    Next 
End Sub 
0

我想一個簡單的重寫也幫不了你那麼多,因爲你需要建立一個數據庫連接,處理錯誤等

我建議你看看ajaxed library您提供db.insert()方法..我相信這和你需要的方法一樣。