Asp.net 选择asp web窗体中的位置

Asp.net 选择asp web窗体中的位置,asp.net,webforms,Asp.net,Webforms,我在使用ASP Web表单时遇到很多问题,目前我正在尝试从数据库中获取数据,并根据用户在表单文本框中输入的内容进行过滤 到目前为止,我已经了解到了这一点,如果我删除关于created by的查询的最后一位,它将从数据库中选择数据,但一旦我开始尝试过滤created by,它就会说必须声明标量变量@1。我现在只是把头撞在砖墙上 @{ var db1 = Database.Open("<database name>"); var selectCMD = "SELECT C

我在使用ASP Web表单时遇到很多问题,目前我正在尝试从数据库中获取数据,并根据用户在表单文本框中输入的内容进行过滤

到目前为止,我已经了解到了这一点,如果我删除关于created by的查询的最后一位,它将从数据库中选择数据,但一旦我开始尝试过滤created by,它就会说必须声明标量变量@1。我现在只是把头撞在砖墙上

@{
    var db1 = Database.Open("<database name>");
    var selectCMD = "SELECT CompanyName, FirstName, LastName, Description, LeadSourceCode, CreatedOn FROM LeadBase INNER JOIN LeadExtensionBase ON LeadBase.LeadId = LeadExtensionBase.LeadId WHERE (CreatedOn BETWEEN CAST(DATEADD(dd, - 140, GETDATE()) AS DATE) AND CAST(DATEADD(dd, -7, GETDATE()) AS DATE)) AND (LeadExtensionBase.new_GenActivity = 0)";

if(!Request.QueryString["searchId"].IsEmpty()) 
{ 
    searchTerm1 = Request.QueryString["searchId"];
    selectCMD = "SELECT CompanyName, FirstName, LastName, Description, LeadSourceCode, CreatedOn FROM LeadBase INNER JOIN LeadExtensionBase ON LeadBase.LeadId = LeadExtensionBase.LeadId WHERE (CreatedOn BETWEEN CAST(DATEADD(dd, - 140, GETDATE()) AS DATE) AND CAST(DATEADD(dd, -7, GETDATE()) AS DATE)) AND (LeadExtensionBase.new_GenActivity = 0) AND (LeadBase.CreatedBy = @1)";
}
var selectedDBdata = db1.Query(selectCMD, searchTerm1);
@{
var db1=Database.Open(“”);
var selectCMD=“从LeadBase内部选择公司名称、FirstName、LastName、Description、LeadSourceCode、CreatedOn加入LeadBase上的LeadExtensionBase.LeadId=LeadExtensionBase.LeadId,其中(CreatedOn介于强制转换(DATEADD(dd,-140,GETDATE())为日期)和强制转换(DATEADD(dd,-7,GETDATE())为日期)和(LeadExtensionBase.new_GenActivity=0)之间”;
如果(!Request.QueryString[“searchId”].IsEmpty())
{ 
searchTerm1=Request.QueryString[“searchId”];
selectCMD=“选择公司名称、名字、姓氏、描述、LeadSourceCode、CreatedOn从LeadBase内部加入LeadExtensionBase ON LeadBase.LeadId=LeadExtensionBase.LeadId其中(CreatedOn介于转换(DATEADD(dd,-140,GETDATE())为日期)和转换(DATEADD(dd,-7,GETDATE())为日期)之间)和(LeadExtensionBase.new\U GenActivity=0)和(LeadBase.CreatedBy=@1)”;
}
var selectedDBdata=db1.Query(selectCMD,searchTerm1);
}


输入员工ID
输入起始日期
输入日期至
@如果(!Request.QueryString[“searchId”].IsEmpty()){
公司名称
名字
姓
描述
铅源代码
@foreach(db1.Query中的var行(selectCMD)){
@行。说明
}
}

请在第二次选择查询中删除@1,因为您尚未将@1声明到您所在的任何位置。如果您仍然遇到任何问题,请告诉我

像这样改变,

selectCMD = "SELECT CompanyName, FirstName, LastName, Description, LeadSourceCode, CreatedOn FROM LeadBase INNER JOIN LeadExtensionBase ON LeadBase.LeadId = LeadExtensionBase.LeadId WHERE (CreatedOn BETWEEN CAST(DATEADD(dd, - 140, GETDATE()) AS DATE) AND CAST(DATEADD(dd, -7, GETDATE()) AS DATE)) AND (LeadExtensionBase.new_GenActivity = 0) AND (LeadBase.CreatedBy = @1)
selectCMD.Parameters.AddwithValue("@1",'"+TextBox1.Text+"'); // Your textbox values

尝试将selectCMD中的@1更改为@0


传递到db1.Query的第一个对象(selectCMD,searchTerm1)映射到@0而不是@1

这是我需要做的,尽管我需要它根据文本字段的值提取数据,然后删除1,而不是使用文本框值。现在您检查我的答案。我已经编辑了。永远不要在查询中直接使用文本框。使用参数化查询防止SQL注入这正是我想要的我试着做@Dooie,但它没有任何it@Crouch现在检查一下。是的,我也试过了,我暂时用了一个效率较低的解决方案,但只要我现在有一个有效的解决方案,我就可以在以后解决效率问题。我只需要展示一些进展
selectCMD = "SELECT CompanyName, FirstName, LastName, Description, LeadSourceCode, CreatedOn FROM LeadBase INNER JOIN LeadExtensionBase ON LeadBase.LeadId = LeadExtensionBase.LeadId WHERE (CreatedOn BETWEEN CAST(DATEADD(dd, - 140, GETDATE()) AS DATE) AND CAST(DATEADD(dd, -7, GETDATE()) AS DATE)) AND (LeadExtensionBase.new_GenActivity = 0) AND (LeadBase.CreatedBy = @1)
selectCMD.Parameters.AddwithValue("@1",'"+TextBox1.Text+"'); // Your textbox values