【问题标题】:SQL data not showing two columns on siteSQL 数据未在站点上显示两列
【发布时间】:2020-03-26 17:24:00
【问题描述】:

我在 Azure 上与我的 SQL Server 建立了数据库连接。页面上显示了两列,但没有显示其他 2. 列是公司名称和更多详细信息

Company Name 是标准的企业名称

Further Details 存储更多信息的 URL

我已经尝试了 SQL 管理中的 SQL 语句,它显示了应该显示的数据。

我检查了列的参数,它们都是 nvarchar(Max) 在单击以修改列的大小时显示为 -1。这是否意味着它的大小不受限制?

文件类型是带有内联 CSS 和 HTML 的经典 ASP。

以下是在数据库中调用的内容。

<%
Session.LCID=2057

Dim connpiudb, rspiudata, strSQL, fldThis, strSQL2, strSQL3, strcategory

strcategory = Request.querystring("category")

Set connpiudb = Server.CreateObject("ADODB.Connection")
Set rspiudata = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT companyname, courtnumber, cronumber, furtherdetails FROM piudata WHERE category LIKE '" & strCategory & "%' Order by companyname"
 strValue = Request.QueryString(<%= rspiudata.Fields("companyname") %>)

response.write strSQL
response.write strValue

<!-- strSQL = "SELECT companyname , courtnumber , cronumber, furtherdetails FROM piudata WHERE category LIKE '%c%' Order by companyname" -->

connpiudb.Open strConnect
rspiudata.open strSQL, connpiudb
%>

以下是数据库在 HTML 表中的存储方式。

<!--content start-->

<FONT FACE="Arial" size="2">

<TABLE BORDER="0" cellpadding="2" width="60%"><TR>

  <%
  Do Until rspiudata.EOF
  %>
  <TR><TD width="40%"><B>Company Name:</B></TD><TD width="60%"><%= rspiudata.Fields("companyname") %></TD></TR>  
  <TR><TD width="40%"><B>Further Details:</B></TD><TD width="60%"><%=rspiudata.Fields("furtherdetails") %></TD></TR>
  <TR><TD width="40%"><B>Court Number:</B></TD><TD width="60%"><%= rspiudata.Fields("courtnumber") %></TD></TR>
  <TR><TD width="40%"><B>Company Registered Number:</B></TD><TD width="60%"><%= rspiudata.Fields("cronumber") %></TD></TR>
  <TR><TD width="100%" colspan="2"><HR></TD></TR>
  <%
  rspiudata.movenext
  Loop

  rspiudata.Close
  Set rspiudata = Nothing
  connpiudb.close
  %>
</TABLE>

我很难理解实际问题是什么。我唯一想到的是将列大小设置为 MAX 时默认为 -1,或者 Classic ASP 不支持 NVARCHAR(max)

任何帮助都会很棒。

【问题讨论】:

  • Classic ASP 支持什么无关紧要,(基于 SQL Server Provider) ADODB 支持什么。检查您在连接字符串中使用的提供程序是否支持 varchar(max) 和 nvarchar(max)。
  • 正如已经指出你不能这样做strValue = Request.QueryString(&lt;%= rspiudata.Fields("companyname") %&gt;)它应该是strValue = Request.QueryString(rspiudata.Fields("companyname").Value)。

标签: sql asp-classic sqlconnection


【解决方案1】:

在进一步讨论之前,需要更正以下代码

<%
...
strValue = Request.QueryString(<%= rspiudata.Fields("companyname") %>)

我知道您将它用于调试目的,但是它既没有有效的语法(您在现有的服务器代码块中注入 &lt;% %&gt;,也没有有效的运算符(Request.QueryString 用于查询字符串),也没有正确的位置(记录集已定义但未打开)。

并阅读有关 sql 注入的信息。

【讨论】:

  • 那么它会是这样的吗? 公司名称: ) 我试过了,但它给了我一个语法错误。我确实认为这是一个兼容问题,因为当我将列类型更改为 nvarchar(100) 时,假设它调用了数据。它只是其中一列正在拉取 URL。正如之前的评论所说,SQL Server Provider 可能与 nvarchar(MAX) 不兼容,我使用的驱动程序是 SQL Server Native Client 11.0。
  • 用您当前代码的精确副本更新您的问题。由于strValue = Request.QueryString(&lt;%= rspiudata.Fields("companyname") %&gt;) 行,给定示例无效
  • 以&lt;% Session.LCID=2057 开头的整个示例块应该停止并在&lt;%= rspiudata.Fields("companyname") %&gt; 行出现错误,即目前它与Azure 无关,因为asp 代码不正确。跨度>
  • 你在现有的服务器代码块&lt;% %&gt;中注入&lt;% %&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多