这样写有什么错/
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText ="insert into Worker(WorkerID,DeptID,WorkerName,IDCard,RoleID,Pwd,tele,operate) "+
" values (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8)";     cmd.Parameters.Add("@p1",SqlDbType.Char,5,"WorkerID").Value = worker.WorkerID;
cmd.Parameters.Add("@p2",SqlDbType.Char,2,"DeptID").Value = worker.DeptID;
cmd.Parameters.Add("@p3",SqlDbType.Char,20,"workerName").Value = worker.WorkerName;
cmd.Parameters.Add("@p4",SqlDbType.VarChar,15,"IDCard").Value =worker.IDCard;
cmd.Parameters.Add("@p5",SqlDbType.VarChar,50,"RoleID").Value =worker.RoleID;
cmd.Parameters.Add("@p6",SqlDbType.VarChar,50,"Pwd").Value =worker.Pwd;
cmd.Parameters.Add("@p7",SqlDbType.VarChar,15,"Tel").Value =worker.Tele;
cmd.Parameters.Add("@p8",SqlDbType.VarChar,5,"operate").Value =worker.Operate ; conn.open();

cmd.ExecuteNonQuery();
老提示 "被准备语句 '(@p1 char(5),@p2 char(2),@p3 char(20),@p4 varchar(15),@p5 varcha' 需要参数 @p3,但未提供该参数。\r\n未能准备语句。"

解决方案 »

  1.   

    去掉@p3后面的参数就可以insert 
    insert into Worker(WorkerID,DeptID) values (@p1,@p2)";
    这样没问题
      

  2.   

    我没有做过测试,
    是不是因为worker.WorkerName的值为null,导致insert语句
    insert into worker(WorkerID,DeptID,WorkerName) values(001,001,)
    解决办法是如果是字符类型,需要加''才行,如
    insert into worker(WorkerID,DeptID,WorkerName) values('001','001','')
      

  3.   

    改为:        cmd.CommandText = String.Format(@"insert into Worker(WorkerID,DeptID,WorkerName,IDCard,RoleID,Pwd,tele,operate)  values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')",
                worker.WorkerID,
                worker.DeptID,
                worker.WorkerName,
                worker.IDCard,
                worker.RoleID,
                worker.Pwd,
                worker.Tele,
                worker.Operate);conn.open();
    cmd.ExecuteNonQuery();
      

  4.   

    非储存过程也带参数, 跟踪看看执行之前cmd.CommandText=?
      

  5.   

    跟踪一下worker.WorkerID 值是多少
      

  6.   

    执行加上下列语句: System.Data.SqlClient.SqlParameter[] pars = cmd.Parameters;
    if (pars != null)
                {
                    foreach (SqlParameter p in pars)
                    {  if (p.Value == null)
                        {
                            p.Value = DBNull.Value;
                        }
                    }
                }
      

  7.   

    你把(WorkerID,DeptID,WorkerName,IDCard,RoleID,Pwd,tele,operate)这句删了就可以的。试试吧。
      

  8.   

    提示这样的问题,有可能是你所提供给@p3的值是null,你可以跟踪查一下
      

  9.   

    呵呵这个问题我也碰到过。 其实很简单,你把 SqlCommand 或OleDbCommand 就可了。
      

  10.   

    我以前碰到过类似的错误,因为其中的一个参数值是null ,你可以从这方面着手试一试