1

我是 ASP.NET 的新手,并且已经被这个问题困扰了两个星期。请帮忙!

我正在尝试为使用 MySql 构建的本地数据库构建一个具有搜索功能的网站。我希望搜索结果显示在我网站的单独页面上。我使用了服务器传输方法,并且我的代码如下:

对于要输入搜索文本的页面,我有一个文本框和一个单击按钮,.cs 文件是:

using System;
using System.Collections.Generic; 
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.MySqlClient;


public partial class Default_Page : System.Web.UI.Page
{
   public string Default_Page_TextBox1
   {
      get { return Default_Page_TextBox1.Text; }
      set { this.Default_Page_TextBox1.Text=value; }
   }


   private void Default_Page_Button1_Click(object sender, System.EventArgs e)
   {
      Server.Transfer("Default_Search_Result.aspx");
   }
}

要显示搜索结果的页面,.cs 文件为:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.MySqlClient;

public partial class Default_Search_Result : System.Web.UI.Page
{
   MySqlConnection connection = null;
   MySqlCommand command = null;
   MySqlDataReader reader = null;

   protected void Page_Load(object sender, EventArgs e)
   {
      string myConString = "SERVER=localhost;" +
         "DATABASE=mydb;" +
         "UID=**;" +
         "PASSWORD=**;";

      connection = new MySqlConnection(myConString);

      Default_Page Dp;

      Dp = (Default_Page)Context.Handler;

      command = connection.CreateCommand();
      command.CommandText = "select BkName from bkinfo where bkname = '" + Default_Page_TextBox1.Text + "'";
      connection.Open();
      reader = command.ExecuteReader();

      if (reader.Read())
      {
         Label1.Text = reader.GetValue(0).ToString();
      }
      else
      {
         Label1.Text = "Not Found";
      }
      connection.Close();
   }
}

搜索不起作用。Visual Studio 捕获 3 个错误:

  1. 在要输入文本进行搜索的页面 (Default_Page) 上,

    返回 Default_Page_TextBox1.Text;

显示:

“字符串”不包含定义或“文本”,并且找不到接受“字符串”类型的第一个参数的扩展方法“文本”。

  1. 在页面显示搜索结果(Default_Search_Result)上,

    Default_Page Dp;

显示:

找不到类型或命名空间名称“Default_Page”

  1. 仍然在页面上显示搜索结果(Default_Search_Result),

    command.CommandText = "从 bkinfo 中选择 BkName,其中 bkname = '" + Default_Page_TextBox1.Text + "'";

显示:

当前上下文中不存在名称“Default_Page_TextBox1”。

有人可以帮我找出问题所在吗?

4

1 回答 1

1

这段代码有很多错误,这让我觉得你可能想退后一步,从一些更简单的 C# 教程开始。但是,也许我可以为您指出为什么会发生每个错误的正确方向。让我们从:

   public string Default_Page_TextBox1
   {
      get { return Default_Page_TextBox1.Text; }
      set { this.Default_Page_TextBox1.Text=value; }
   }

您已经实现了一个引用自身的属性。换句话说,Default_Page_TextBox1是一个字符串,它的 getter 返回它自己的一个属性。编译器错误正在发生,因为没有string名为 的属性Text,但这是您的问题中最少的一个。您最终将Default_Page_TextBox1递归调用 getter,并最终导致堆栈溢出。也许您有一个名为 的 Web 控件TextBox1,在这种情况下您可以直接引用它(因为 Visual Studio 设计器将在您的部分类中实现它。

接下来是错误*找不到类型或命名空间名称“Default_Page”*。显然,您已经声明了一个名为Default_Page. 我假设它在同一个程序集中,所以这不是问题。但是,由于此类存在编译器错误(见上文),我猜想找不到该类型,因为该类从未正确编译。修复上面的错误,这个错误应该会消失。

最后是:

command.CommandText = "select BkName from bkinfo where bkname = '" + Default_Page_TextBox1.Text + "'";

这个说法有几个问题。首先,该类Default_Search_Result没有名为 的属性Default_Page_TextBox1Server.Transfer()您似乎认为在您离开其他班级后可以访问您的财产。这是错误的。

一个更好的解决方案是实现您<form>直接发布Default_Search_Result,并使用阅读搜索查询Request.QueryString

此外,请记住使用字符串连接构建 SQL 选择语句是一个坏主意。如果您的文本包含撇号,它将结束字符串常量。这可以用来运行任意 SQL 语句,这是一种称为 SQL 注入的安全漏洞。如果您只是在学习,您的代码很好,但永远不要在任何重要的代码上这样做。继续阅读如何参数化 SQL 查询来解决这个问题。

于 2013-06-22T23:19:24.083 回答