我有一个简单的ASP.NET Web表单,其中包含5个文本框和一个提交按钮,用于过滤从数据库返回的结果集。
无论输入什么,DataAdapter
都会填充表格的完整内容,而不包含任何参数。
我的代码有什么问题?
private void BindGridView()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLServer2005DBConnectionString"].ToString()))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "select Cust_SID, First_name, Last_name, Address1, Phone1, Email_addr from Customer where 1=1";
if (!String.IsNullOrEmpty(txtAddress.Text))
{
cmd.Parameters.AddWithValue("@Address1", SqlDbType.NVarChar).Value = "%" + txtAddress.Text + "%";
}
if (!String.IsNullOrEmpty(txtFirstName.Text))
{
cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text + "%");
}
if (!String.IsNullOrEmpty(txtLastName.Text))
{
cmd.Parameters.AddWithValue("@LastName", "%" + txtLastName.Text + "%");
}
if (!String.IsNullOrEmpty(txtEmail.Text))
{
cmd.Parameters.AddWithValue("@Email", "%" + txtEmail.Text + "%");
}
if (!String.IsNullOrEmpty(txtPhone.Text))
{
cmd.Parameters.AddWithValue("@Phone1", "%" + txtPhone.Text + "%");
}
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet dsCustomer = new DataSet();
da.Fill(dsCustomer, "Customer");
DataView dvCustomer = dsCustomer.Tables["Customer"].DefaultView;
dvCustomer.Sort = ViewState["SortExpression"].ToString();
gvCustomer.DataSource = dvCustomer;
gvCustomer.DataBind();
}
}
答案 0 :(得分:1)
您必须在SQL中实际包含参数:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data_list_layout);
listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(listDataAdapter);
listView.setOnItemClickListener(this);
}
答案 1 :(得分:0)
SQL字符串有时会让人感到困惑。
第一部分SELECT
在对数据库的请求结束时执行。
数据库适配器所做的第一件事是输入表(FROM
tableName)。
第二件事是WHERE
陈述的比较。
在这里,您可以选择数据库需要返回的行。
例如。 WHERE column1 =“someValue”。
你将得到column1为“someValue”的行。
第三个是group by
和order by
语句。
最后,从数据库为该请求保存的内部行列表(在WHERE之后),您可以SELECT
找到您想要的列。
如果你想要所有的colums你只需要*,否则你会给出更多列名甚至“MAX(columName)”,它们会给你那个列中最高的数字(仅限数字列)。
您可以通过两种方式编写SQL字符串代码:
First
方法是对WHERE语句进行硬编码。如果参数不是像DateTime
这样的复杂类型,则可以接受:
"SELECT * FROM tableName WHERE column1=" + variable;
Second
方式是使用参数。这种方式更好,因为SqlCommand对象会将您的参数转换为正确的DbType:
"SELECT * FROM tableName WHERE column1=@paramerter1";
var t = com.CreateParameter();
t.ParameterName = "@parameter1";
t.Value = variable;
com.Parameters.Add(t);
测试sql-strings的好程序是“SqlTryOut”。 谷歌搜索会做。