【问题标题】:How to Create Search using Three Tier Architechture如何使用三层架构创建搜索
【发布时间】:2019-05-02 14:36:50
【问题描述】:

所以我正在尝试使用三层创建搜索,并且在线没有很多好的示例,所以我尝试了它是否可以使其工作,但由于某种原因它无法工作。你能看看我的代码,看看我做错了什么吗?

存储过程:

CREATE PROCEDURE [dbo].[GuestSearch]
    @FirstName varchar(20),
    @LastName varchar(20),
    @Phone varchar(15)
AS
    SELECT FirstName, Lastname, Phone
    FROM Guest
    WHERE FirstName LIKE '%'+@FirstName+'%'
    AND LastName LIKE '%'+@LastName+'%' AND
    Phone LIKE '%'+@Phone+'%'

比利时

public class GuestBEL
    {
        public int GuestID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Phone { get; set; }
    }

BLL

public DataSet FindGuest()
        {
            GuestDAL objDAL = new GuestDAL();
            return objDAL.FindGuest();
        }

DAL

public DataSet FindGuest()
        {
            DataSet dts = new DataSet();
            SqlCommand cmd = new SqlCommand("GuestSearch", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter adapt = new SqlDataAdapter(cmd);
            con.Open();
            adapt.Fill(dts);
            cmd.Dispose();
            dts.Dispose();
            con.Close();
            return dts;
        }

用户界面

protected void btnSearch_Click(object sender, EventArgs e)
        {
            DataSet data = new DataSet();
            data = objBLL.FindGuest();
            gvGuest.DataSource = data;
            gvGuest.DataBind();
            readGrid();
        }

因此,当我在搜索中键入内容时,gridview 应该显示我在文本框中输入的内容,但由于某种原因,我得到的错误是“程序或函数 'GuestSearch' 需要参数 '@FirstName',而这不是提供。'

【问题讨论】:

  • 您必须将参数添加到您的SqlCommand

标签: c# asp.net search three-tier


【解决方案1】:

需要在public DataSet FindGuest()函数中将参数添加到Command中:

cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = "somename";
cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = "somelastname";
cmd.Parameters.Add("@Phone", SqlDbType.VarChar).Value = "somephone";

【讨论】:

  • 或者你可以让存储过程的参数可选:@FirstName varchar(20) = ''等等。
  • 所以我尝试了该方法,但在我的 UI DataBinding 中返回此错误:'System.Data.DataRowView' 不包含名为 'GuestID' 的属性。'
  • 您的 gvGuest 网格似乎需要一个 GuestID 字段,但数据源没有它。能否在存储过程的select语句中添加GuestIDSELECT GuestID, FirstName, Lastname, Phone
  • 这通常是由于在this question 中回答的列不存在时引起的。你能告诉我们你的 GridView 实现吗?
猜你喜欢
  • 2016-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
相关资源
最近更新 更多