C# 根据ASP.NET文本字段的内容选择SQL搜索字符串
下面代码隐藏的目标是根据文本框是否为空,在字符串变量中选择SQLC# 根据ASP.NET文本字段的内容选择SQL搜索字符串,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,下面代码隐藏的目标是根据文本框是否为空,在字符串变量中选择SQLselect语句,然后执行该语句。我尝试了使用变量和直接执行SELECT语句 SqlDataSource1.SelectCommand = 'SELECT...' 不幸的是,当我将数据放入要检查的文本字段时,这两个方法都没有返回任何内容 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System
select
语句,然后执行该语句。我尝试了使用变量和直接执行SELECT
语句
SqlDataSource1.SelectCommand = 'SELECT...'
不幸的是,当我将数据放入要检查的文本字段时,这两个方法都没有返回任何内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.Sql;
namespace MyProgram
{
public partial class WebForm1 : System.Web.UI.Page
{
string query = "";
protected void Page_Load(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = query;
SqlDataSource1.SelectParameters.Add("NameLast", SearchLast.ToString());
SqlDataSource1.SelectParameters.Add("NameFirst", SearchFirst.ToString());
SqlDataSource1.SelectParameters.Add("SSN", SearchSSN.ToString());
SqlDataSource1.SelectParameters.Add("DOB", SearchDOB.ToString());
SqlDataSource1.SelectParameters.Add("Case", SearchCase.ToString());
}
protected void Button1_Click(object sender, EventArgs e)
{
if (SearchCase.Text != string.Empty)
{
SqlDataSource1.SelectCommand = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE CLTCAS = @Case";
}
if (SearchSSN.Text != string.Empty && SearchSSN.Text.Length == 4 && SearchLast.Text == string.Empty && SearchFirst.Text == string.Empty)
{
SqlDataSource1.SelectCommand = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE right(CLTSSN,4) = @SSN";
}
if (SearchSSN.Text != string.Empty && SearchSSN.Text.Length == 9 && SearchLast.Text != string.Empty && SearchFirst.Text == string.Empty)
{
query = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE CLTSSN = @SSN";
}
if (SearchLast.Text != string.Empty && SearchFirst.Text != string.Empty && SearchDOB.Text == string.Empty && SearchSSN.Text == string.Empty)
{
query = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE CLTLST = @NameLast and CLTFST like @NameFirst+'%'";
}
if (SearchLast.Text != string.Empty && SearchFirst.Text == string.Empty && SearchSSN.Text == string.Empty && SearchDOB.Text == string.Empty)
{
query = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE CLTLST = @NameLast+'%'";
}
if (SearchLast.Text == string.Empty && SearchFirst.Text == string.Empty && SearchSSN.Text == string.Empty && SearchDOB.Text != string.Empty)
{
query = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE (cltbyr+'-'+cltbmm+'-'+cltbdd = @DOB)";
}
if (SearchLast.Text != string.Empty && SearchFirst.Text == string.Empty && SearchSSN.Text == string.Empty && SearchDOB.Text != string.Empty)
{
query = "SELECT CLTCAS,CLTLST+', '+CLTFST,DATEFROMPARTS(cltbyr,cltbmm,cltbdd),CLTCTY+', '+[ CLTSTA],CLTSSN,CLTSEX FROM CLTMST WHERE CLTLST = @NameLast+'%' AND (cltbyr+'-'+cltbmm+'-'+cltbdd = @DOB)";
}
}
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
}
}
}
我认为你最好用声明的方式,用ControlParameters来做这件事。在标记中,SqlDataSource1声明将有一个
部分:
<asp:SqlDataSource ID="SqlDataSource1" runate="server"
CancelSelectOnNullParameter="False" ...other stuff... >
...other stuff...
<SelectParameters>
<asp:ControlParameter name="NameLast" controlid="SearchLast" propertyname="Text"/>
<asp:ControlParameter name="NameFirst" controlid="SearchFirst" propertyname="Text"/>
<asp:ControlParameter name="SSN" controlid="SearchSSN" propertyname="Text"/>
<asp:ControlParameter name="DOB" controlid="SearchDOB" propertyname="Text"/>
<asp:ControlParameter name="Case" controlid="SearchCase" propertyname="Text"/>
</SelectParameters>
</asp:SqlDataSource>
就您的原始代码而言,当您添加文本框值作为参数时,您希望添加
.Text
属性作为默认值:
SqlDataSource1.SelectParameters.Add("NameLast", SearchLast.Text);
你需要这样的东西 在类范围内
private bool _hasWhere;
方法动态生成Select语句
private string GetSelectSql()
{
string sql = "Select ...... From .... "; // also, make sql a StringBuilder
if (txtLastName.Text.Trim() != string.empty)
{
if (SetWhere())
sql += " Where ";
else
sql += ",";
sql += string.Format(" LastName like '%{0}%' ", txtLastName);
}
if (txtFirstName.Text.Trim() != string.empty)
{
if (SetWhere())
sql += " Where ";
else
sql += ",";
sql += string.Format(" FirstName like '%{0}%' ", txtLastName);
}
// keep on going here .................
return sql;
}
帮助器方法,以确定是否已插入了
// if your sql was StringBuilder you would just pass it here and do sb.Append(" Where ")
private bool SetWhere()
{
if (!hasWhere)
{
hasWhere = true;
return true;
}
return false;
}
获取命令对象的方法
private SqlCommand CreateCommand (string sql)
{
.............
SqlCommand command = new Sqlcommand(sql,....
.............
return Command
}
因此,您可以在执行命令之前分配命令
SqlDataSource1.SelectCommand = CreateCommand(GetSelectSql())
这不是完整的功能代码,但我希望这能让您了解需要执行的操作我认为我们需要执行该命令。您是否尝试过使用调试器?例如,SqlDataSource1.SelectParameters.Add(“NameLast”,SearchLast.ToString())
将把类型的名称(即Textbox)添加到参数中,而不是文本框的文本值。在我看来,这是非结构化的混乱。您需要先创建“选择”,然后创建命令,然后execute@marc_s不是根据MSDN。只是好奇,贴出的答案是解决了你的问题,还是帮助了你?
SqlDataSource1.SelectCommand = CreateCommand(GetSelectSql())