当前位置:编程学习 > C#/ASP.NET >>

求大神 关于C#中sql的参数问题

//用SQL来实现模糊搜索studentid
            StringBuilder 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()判断, --------------------编程问答--------------------
引用 1 楼 WhereIsMyMind 的回复:
调试一下看下你的sql语句拼出来是什么样的
--------------------编程问答-------------------- 还算正常啊!!!!!!!!11 --------------------编程问答--------------------
引用 2 楼 zdbb 的回复:
检查下textBox1.Text.Trim().Length>0
   嗯   很正确 不过  通过 断点调试 它 确实 进入 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;  
       }

这里有错误,好好看看数据库的操作 --------------------编程问答--------------------
引用 7 楼 zdbb 的回复:
检查你的代码,应该是没有把 SqlParameter 即parameter 赋给到 SqlDataAdapter SqlCommand,所以找不到@studentid

正解 --------------------编程问答-------------------- 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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,