【问题标题】:Writing to SQL database with Classic ASP使用经典 ASP 写入 SQL 数据库
【发布时间】:2017-10-22 21:40:28
【问题描述】:

我正在尝试将一些数据提取到我的数据库中。 我使用 Microsoft Webmatrix 进行轻松开发,并设置和运行 SQL 数据库。

** 更新 ** 标签和变量混合在一起 - 抱歉 - 现在我收到此错误:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'ConnectDB'

/writenote.asp, line 17 

请不要关注安全性,因为这将在无法访问互联网且只有操作员访问权限的独立设备上运行。

以下是我用于输入数据库的内容。

“连接.asp”:

<% 
dim strConnect
strConnect = "Provider=SQLOLEDB;Data Source=(local);" & _
         "Database=HISTORICDATA;User ID=userid;Password=pw"
%>
<!-- METADATA TYPE="typelib"
 FILE="C:\Program Files (x86)\Common Files\System\ado\msado15.dll" -->

我的表格:

<form action="writenote.asp" method="post">
<fieldset>
<legend>New note for <% response.write(tagname) %></legend>

Time:<br />
<input type="datetime-local" name="timestamp" value="<% Response.Write Now %>" required><br />

Object:<br />
<input type="text" name="object" value="<% response.write(tagname) %>" required><br />

User:<br />
<input type="text" name="user" value="<% response.write(loginuser) %>" required><br />

Note:<br />
<textarea name="note" rows="10" cols="30" required></textarea>
<br /><br />

<input type="submit" value="Submit">
<input type="reset">
</fieldset>
</form>

下面是“writenote.asp”的内容:

<%

dim username,object,time,note,objConn,objs,query

username = Request.Form("user")
tag      = Request.Form("object")
time     = Request.Form("timestamp")
note     = Request.Form("note")

Set objConn = ConnectDB()
query       = "INSERT INTO notes (username,object,time,note) VALUES ('"& username &"','"& object &"','"& time &"','"& note &"')"
Set objs    = objConn.Execute(query)

Response.Redirect("notes.asp")
%>

老问题:

当我填写表格时,它一直说:

![Http 500错误]https://cdn2.hubspot.net/hub/501326/file-2730129857-png/blog-files/01-sharepoint-2013-the-website-cannot-display-the-page-http-500-500x249.png?t=1482420346935

我无法让它在我的数据库中插入任何数据,并且不断出现 http 500 错误。

【问题讨论】:

  • tagobject 的变量混淆了,没有声明,需要注意。问:你知道现在是哪一年吗? :) 或者,您只是喜欢使用旧技术吗?
  • @R.Richards 谢谢!有时,重新审视代码是解决方案。但现在又出现了另一个问题——我已经更新了这个问题。是的,我知道它的旧技术,但这必须在旧的浏览器应用程序上运行。所以是故意的。但我有点忘记了 ASP 是如何工作的;'D
  • @SearchAndResQ 你说得对。我会想办法做到这一点..谢谢:)
  • 我的建议?扔 Webmatrix 并学习自己编写经典的 ASP。这需要一些时间,但是一旦你学会了,你就不会依赖那些你花费数小时和数天试图弄清楚它们是如何工作以及为什么某些东西不起作用的花哨的东西。从长远来看,它将为您节省大量时间和金钱。 (对公司)
  • 如果您喜欢开箱即用的环境。你应该试试 Django。简单、快速且活跃的语言:)

标签: sql sql-server asp-classic


【解决方案1】:

在 writenote.asp 中你可以这样做

    <%
    dim username,object,time,note,dbInsert,dbOpen

    Set connect = Server.CreateObject("ADODB.Connection")
    dbOpen = "PROVIDER=SQLOLEDB;Data Source=(local);UID=username;PWD=password;Database=HISTORICDATA "

    username = Request.Form("user")
    tag      = Request.Form("object")
    time     = Request.Form("timestamp")
    note     = Request.Form("note")

    connect.open(dbOpen)
    dbInsert       = "INSERT INTO notes (username,object,time,note) VALUES ('"& username &"','"& object &"','"& time &"','"& note &"')"
    connect.Execute(dbInsert)
    connect.Close
    Set Connect = Nothing

    Response.Redirect("notes.asp")
    %>

如果您在很多页面中进行数据库查询,请按照您的示例进行操作。把它放在 'connect.asp' 或 config.asp' 中:

Set connect = Server.CreateObject("ADODB.Connection")
        dbOpen = "PROVIDER=SQLOLEDB;Data Source=(local);UID=username;PWD=password;Database=HISTORICDATA "

您可以将其包含到您正在使用此代码 sn-p 进行数据库查询的任何页面中:

<!-- #include file="connect.asp" -->

我必须包含在 -标签之外。

在进行查询时使用以下语法:

    connect.open(dbOpen)
    dbQuery = "put your query here" 
    connect.execute(dbQuery)    
    connect.Close
    Set Connect = Nothing

【讨论】:

  • 感谢您的回答。我让它工作了。我可以看到我们以同样的方式完成了它,但你看起来更漂亮:)
【解决方案2】:

我找到了一个有效的解决方案。非常感谢您的贡献和帮助。

在“Connect.asp”中,我连接到数据库并创建记录集供我稍后使用。

文档“notes.asp”通过来自其他地方的 cookie 获取所需的信息。此数据在同一位置处理且未显示,因为其中包含不公开显示的信息:)

在左侧部分,我为 SQL 数据库创建输入。大多数字段对于用户来说都是只读的,因为输入来自 cookie 和时间。 相同标记名的注释显示在右侧部分的文本区域中。 也可以打印此数据(以无序方式)。

我将在下面发布我的代码,但不会发布 CSS。 VB 可能是无序的,但就像一个魅力。

连接.asp:

<% 'include file
dim strConnect,objConn,objRecordSet

Set objConn = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConn.Open = "Provider=SQLOLEDB;Server=.\SQLEXPRESS;" & _
           "Database=HISTORICDATA;User ID=sa;Password=PW;"

%>
<!-- METADATA TYPE="typelib"
 FILE="C:\Program Files (x86)\Common Files\System\ado\msado15.dll" -->

来自我的“notes.asp”:

<%@ Language="VBScript" %>
<!-- #include file="connect.asp" -->
<!-- Cookie handling -->
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="css/styles.css" type="text/css" />
        <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <![endif]-->
<script language="javascript">
<!--
function printTextArea(notetxtarea)
{
 var elementRef = document.getElementById(notetxtarea);
 var windowUrl = 'about:blank';
 var uniqueName = new Date();
 var windowName = 'Print' + uniqueName.getTime();
 var printWindow = window.open(windowUrl, windowName, 'left=50000,top=50000,width=0,height=0');

 printWindow.document.write(elementRef.value);
 printWindow.document.close();
 printWindow.focus();
 printWindow.print();
 printWindow.close();
}
// -->
</script>
        <title>Notes for <% response.write(tagname) %></title>
    </head>
    <body onload="window.resizeTo(1000,900)">

<header>
<h1>Notes for <% response.write(tagname) %></h1>
<p>For use is now:</p>

<%
response.write("Object: " & tagname)
response.write("<br />")
response.write("User: " & loginuser)
%>

</header>

<section>

<form action="writenote.asp" method="post">
    <fieldset>
        <legend>New note for <% response.write(tagname) %></legend>

<label for="tid">Time:</label>
<input type="datetime-local" id="tid" name="timestamp" value="<% Response.Write Now %>" readonly><br />

<label for="objekt">Object:</label>
<input type="text" id="objekt" name="object" value="<% response.write(tagname) %>" readonly><br />

<label for="bruger">User:</label>
<input type="text" id="bruger" name="user" value="<% response.write(loginuser) %>" readonly><br />

<p></p>Note (max. 300 chars):</p>
<textarea name="note" rows="11" cols="30" maxlength="300" required></textarea>
<br /><br />

<input type="submit" value="Submit">
<input type="reset">
        </fieldset>
</form>

</section>

<section>
<fieldset>
<legend>Notes for <% response.write(tagname) %></legend>
    <input type="button" value="Print Notes" onclick="JavaScript:printTextArea('notetxtarea');">
<textarea name="note" rows="23" cols="40" id="notetxtarea" readonly>
<%
dim strSQL,printStr
'Open the recordset object executing the SQL statement and return records
strSQL = "SELECT * FROM dbo.notes WHERE tag = '" & tagname & "' ORDER BY time DESC"

set objRecordSet = objConn.Execute (strSQL)

'first of all determine whether there are any records
If objRecordSet.EOF Then
Response.Write("No records of " & tagname)

Else

Do While NOT objRecordSet.EOF  

Response.write(objRecordSet("time") & vbCrLf)
Response.write(objRecordSet("tag") & vbCrLf)
Response.write(objRecordSet("username")& vbCrLf)
Response.write(objRecordSet("note")& vbCrLf)
Response.write(vbCrLf)
Response.write("-----------------------")
Response.write(vbCrLf)
objRecordSet.MoveNext
Loop
End If

objRecordSet.Close
Set objRecordSet=nothing
objConn.Close
Set objConn=nothing

%>
</textarea>


</fieldset>

</section>



<div class="clearer"></div>
<footer>
<p>Things in my footer</p> 
</footer>


</body>
</html>

来自“writenote.asp”:

<%@ Language="VBScript" %>
<!-- #include file="connect.asp" -->
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Execute write to file</title>
    </head>
    <body>
<%
dim username,tag,time,note,query,objs

username = Request.Form("user")
tag      = Request.Form("object")
time     = Request.Form("timestamp")
note     = Request.Form("note")


objConn.Execute = "INSERT INTO dbo.notes (tag,username,time,note) VALUES ('"+ tag +"','"+ username +"','"+ time +"','"+ note +"')"


Response.Redirect("notes.asp")

objRecordSet.Close
Set objRecordSet=nothing
objConn.Close
Set objConn=nothing

%>
    </body>
</html>

【讨论】:

  • 这里有免费提示 =) 如果您对最佳实践感兴趣。您不应在包含的 connect.asp 中打开连接。你应该像我的例子那样 打开连接 -> 执行查询 -> 关闭连接 -> 将记录集设置为空我>。中间没有代码。您还应该对记录集执行 GetRows() 而不是 IF/ELSE。祝你好运! =)
  • 谢谢@Sumpen :) 我需要阅读更多关于此的内容。
  • 您的代码可能存在其他问题,但其中,您在关闭和取消实例化 ADO 对象之前重定向了“writenote.asp”页面。
  • @codemaker 你是对的。那部分代码也不再存在。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
相关资源
最近更新 更多