求大神 关于C#中sql的参数问题
//用SQL来实现模糊搜索studentidStringBuilder sb = new StringBuilder("select * from studentinfo ");
//用两个LIST分别存储SQL语句和参数
List<string> wheres = new List<string>();
List<SqlParameter> parameter = new List<SqlParameter>();
if (textBox1.Text.Trim().Length>0)
{
wheres.Add("studentid=@studentid");
parameter.Add(new SqlParameter("@studentid",textBox1.Text.Trim()));
}
if (textBox2.Text.Trim().Length>0)
{
wheres.Add("studentname like @studentname");
parameter.Add(new SqlParameter("@studentname", "%" + textBox2.Text.Trim() + "%"));
}
if (textBox4.Text.Trim().Length>0)
{
wheres.Add("sex=@sex");
parameter.Add(new SqlParameter("@sex", textBox4.Text.Trim()));
}
if (textBox3.Text.Trim().Length>0)
{
wheres.Add("address like @address");
parameter.Add(new SqlParameter(" @address", "%" + textBox3.Text.Trim() + "%"));
}
//判断用户是否使用了条件
if (wheres.Count>0)
{
string sql = string.Join(" and ",wheres.ToArray());
sb.Append(" where "+sql);
}
// MessageBox.Show(sb.ToString());
DataTable table= SqlHelper.ExecueDataTable(sb.ToString(), parameter.ToArray());
dataGridView1.DataSource = table;
我的sqlhelper是
public static DataTable ExecueDataTable(string sql ,params SqlParameter[]pms)
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, constr);
//DataSet ds = new DataSet();
DataTable db = new DataTable();
adapter.Fill(db); return db;
}
重点来了 为什么我一运行 就显示
“必须声明标量变量 "@studentid"。” C# SQL 参数 --------------------编程问答-------------------- 调试一下看下你的sql语句拼出来是什么样的 --------------------编程问答-------------------- 检查下textBox1.Text.Trim().Length>0 --------------------编程问答-------------------- 在拼写SQL字符串的时候要注意传空值得情况,因为当为空值时,字符串是不一样的,像楼上说的,要用textbox.Text.Length()判断, --------------------编程问答-------------------- --------------------编程问答-------------------- 还算正常啊!!!!!!!!11 --------------------编程问答-------------------- 嗯 很正确 不过 通过 断点调试 它 确实 进入 IF语句内部 LIST 的 COUNT 数目 也增加一 --------------------编程问答-------------------- 检查你的代码,应该是没有把 SqlParameter 即parameter 赋给到 SqlDataAdapter SqlCommand,所以找不到@studentid --------------------编程问答--------------------
public static DataTable ExecueDataTable(string sql ,params SqlParameter[]pms)
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, constr);
DataTable db = new DataTable();
adapter.Fill(db); return db;
}
SqlParameter[]pms参数就没有...... --------------------编程问答-------------------- SqlParameter[]pms参数就没用...... --------------------编程问答-------------------- 跟msdn好好比较一下,看如何设置参数传值 --------------------编程问答--------------------
public static DataTable ExecueDataTable(string sql ,params SqlParameter[]pms)
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, constr);
//DataSet ds = new DataSet();
DataTable db = new DataTable();
adapter.Fill(db); return db;
}
这里有错误,好好看看数据库的操作 --------------------编程问答--------------------
正解 --------------------编程问答-------------------- ExecueDataTable里面第二个参数好像没用到~ --------------------编程问答--------------------
public static DataTable ExecueDataTable(string sql ,params SqlParameter[]pms)
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, constr);
Adapter.SelectCommand.Parameters..AddRange(pms);//这里要加入参数
DataTable db = new DataTable();
adapter.Fill(db); return db;
}
补充:.NET技术 , C#