【问题标题】:asp.net error retrieving from database when query string contains number当查询字符串包含数字时,从数据库中检索 asp.net 错误
【发布时间】:2012-03-13 08:40:31
【问题描述】:

我正在使用数据集从数据库中检索一些信息,如下所示:

    protected DataSet getInfo() //getting the user info
{
    string id = Request.QueryString["User"];

    SqlCommand cmd = new SqlCommand("SELECT * FROM copy WHERE id=@id", conn());
    cmd.Parameters.AddWithValue("@id", id);

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);

    return ds;
}

   cvPage.InnerHtml = getInfo().Tables[0].Rows[0]["cv"].ToString();
   clPage.InnerHtml = getInfo().Tables[0].Rows[0]["cl"].ToString();
   bioPage.InnerHtml = getInfo().Tables[0].Rows[0]["bio"].ToString();

它可以正常工作,直到查询字符串中有一个数字,所以如果:

QueryString["User"] = "111111"

我会得到一个不正确的语法错误:

Incorrect syntax near '111111'.

但如果没有数字,它会正常工作。

我的数据库包含四列:

id | varchar
cv | nvarchar
cl | nvarchar
bio | nvarchar

我正在使用 asp.net 4.0。

有什么问题?

谢谢

【问题讨论】:

  • 你真的需要id 成为varchar吗?
  • 使用 sql server profiler 查看幕后正在执行的确切查询。
  • @AbeMiessler - 是的,它必须是一个 varchar。但我已经尝试将 CAST 作为 int 并且没有工作。
  • 我同意@AbeMiessler。否则,您可以在 select 语句中将整数“1111”转换为 varchar。
  • @ChristopherRathermel - 我已经尝试过 CAST 和 CONVERT 但没有用。

标签: asp.net sql-server dataset query-string request.querystring


【解决方案1】:
 SqlCommand cmd = new SqlCommand("SELECT * FROM copy WHERE id= CONVERT(varchar(4000), @id) ", conn());

【讨论】:

  • 是相同的错误“'111111' 附近的语法不正确”但是当我尝试转换为 int 时,我得到了这个错误而不是 Conversion failed when converting the varchar value '.....Website.com/Shatha' to data type int
  • 好的,另一种方法,尝试在数据库端处理它。如果您愿意,可以将 4000 更改为其他内容,最好在列定义上使用数字。
  • 是的,谢谢,效果很好。一个简单的问题可以一个表名包含像表 12eight 这样的数字。谢谢
  • @Wahtever - 在回答您的其他问题时,是的,对象名称可以包含数字,但如果它们以数字开头,则必须用 [] 分隔。例如[123foo]。注意 SQL 注入。
  • @MartinSmith - 你是对的,这是 url 重写系统。它会在不更改 url 的情况下转到另一个执行不同 sql 的页面,当我尝试最后一个代码时,他们修复了它。
猜你喜欢
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2011-05-14
相关资源
最近更新 更多