【问题标题】:MS SQL Server 2012 returning blank text?MS SQL Server 2012 返回空白文本?
【发布时间】:2014-04-20 07:55:36
【问题描述】:

我在 MS SQL Server Management Studio 中执行此操作:

SELECT TOP 2 * FROM searchdb.dbo.tblnames;

我收到了两个包含完整信息的帖子。

当我在网页上执行相同操作时,我会得到所有信息除了的文本,它是空白的。

数据库中文本列的类型有:

ntext

我正在使用的连接字符串:

Driver={SQL Server};Server=localhost;Database=searchdb;Uid=myuser;Pwd=mypass;

我也试过:

Driver={SQL Server Native Client 11.0};Server=localhost;Database=searchdb;Uid=myuser;Pwd=mypass;

得到相同的结果。我不知道“SQL Server”和“SQL Server Native Client 11.0”之间的区别,只是“SQL Server”在 ODBC 数据源列表中的日期较新。

发生了什么事? 为什么会返回空白文本?我该如何解决这个问题?

编辑:这是我在 ASP 网页上使用的代码:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={SQL Server};Server=localhost;Database=searchdb;Uid=myuser;Pwd=mypass;"

Set RecSet = Conn.Execute("SELECT TOP 2 * FROM tblnames;")
    Response.Write "ID: "& RecSet("ID") &"<br>"
    Response.Write "Name: "& RecSet("name") &"<br>"
    Response.Write "Mark: "& RecSet("mark") &"<br>"
    RecSet.MoveNext
    Response.Write "ID: "& RecSet("ID") &"<br>"
    Response.Write "Name: "& RecSet("name") &"<br>"
    Response.Write "Mark: "& RecSet("mark") &"<br>"
Set RecSet = Nothing

ID 和 Mark 列都具有“int”数据类型并且可以正常显示,而“name”列是空白的。

编辑 2:

Users with less than 10 reputation can't answer their own question
for 8 hours after asking. You can answer 3/15/2014 4:16:50 AM. Until
then please use comments, or edit your question instead.

您必须在 stackoverflow 上创建一个帐户(以前不需要),而且您无法在新帐户上回答自己的问题,这很愚蠢。我希望某些模组不要编辑这篇文章。如果您的系统出现问题,人们可以指出这一点很重要。

总之,答案如下:

自我回答:

我将连接字符串更改为:

Provider=SQL Server Native Client 11.0;Server=localhost;Database=searchdb;Uid=myuser;Pwd=mypass;

现在一切正常。

我不知道为什么当我将它用作“驱动程序”时它不能正常工作,但无论如何。请注意,“Provider=SQL Server”根本不起作用,而“Driver={SQL Server}”与“Driver={SQL Server Native Client 11.0}”完全相同(即使用空白文本)。

不知道 Provider 与 Driver 有何不同。控制面板 > 管理工具 > ODBC 数据源中的任何地方都没有提到“提供程序”。

经过一些测试,Driver 和 Provider 似乎也一样快,所以使用 Driver 没有任何好处,它只是坏了。

【问题讨论】:

  • 显示用于显示 nText 列内容的代码。
  • 附带说明,请不要使用ntext,它已被弃用多年,仅为向后兼容而存在。如果需要,请改用nvarchar(max)
  • 我正在使用旧的 ASP 代码,它正在使用旧的 Access 数据库,最后认为是时候改用现代数据库了。在对 MySQL 感到头疼之后,我选择了 MS SQL。我使用 ntext 的原因是因为我让 Access 使用他们的向导自动将自身转换为 MSSQL。我宁愿不必手动遍历所有字段并将 ntext 更改为 nvarchar。真的那么重要吗?如果是,为什么以及有没有办法自动完成?稍后将发布 ASP 代码,请稍等。
  • 代码已添加,我认为那里没有任何问题。特别是因为它适用于 Access 数据库。

标签: sql sql-server database odbc


【解决方案1】:

看起来将您的查询更改为使用列列表而不是星号可以解决这个问题。另外,我读到您的 ntext 字段应该是列表中的最后一列。看起来很奇怪,但值得一试。

资源:

http://databases.aspfaq.com/database/how-do-i-deal-with-memo-text-hyperlink-and-currency-columns.html

SQL Server text column affects results returned to classic ASP

编辑:

您也可以尝试在 sql 语句中将 ntext 转换为 nvarchar。

SELECT TOP 2 ID, Mark, CONVERT(NVARCHAR(MAX), Name) [Name] FROM tblNames

【讨论】:

  • 这没有帮助。不明白,怎么会这样?
  • 这绝对是奇怪的。看看我的编辑,看看是否有效。
  • 我刚刚添加了自己的解决方案,只需要更改连接字符串。我会将其发布为答案,但 stackoverflow 的延迟系统不允许新帐户这样做。感谢您的所有帮助,我很感激!
  • @user3421413 限制是有充分理由的,但我认为您可以在 8 小时后回答您自己的问题吗? meta.stackexchange.com/questions/86185/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2019-03-03
  • 2014-09-28
相关资源
最近更新 更多