OleDbCommand.Prepare 方法要求所有可变长度参数具有显式设置的非零“大小”。

时间:2020-12-25 02:06:52
使用Access数据库,请教为什么同样用DataSet更新数据的另一个方法不会抛异常

Login方法adapter.Update(ds);抛异常

public static AdminUser Login(String username, String password, String ip)
        {
            DbConnection conn = DataAccess.GetConn();
            try
            {
                String sql = "select * from ADMIN where username=@username";
                DbDataAdapter adapter = DataAccess.GetAdapter(conn, sql);
                adapter.SelectCommand.Parameters.Add(DataAccess.GetParameter("@username", username));

                DbCommandBuilder cmdBuilder = DataAccess.GetCmdBuilder();
                cmdBuilder.DataAdapter = adapter;

                conn.Open();
                DataSet ds = new DataSet();
                adapter.Fill(ds);

                if (ds.Tables[0].Rows.Count == 1)
                {
                    DataRow row = ds.Tables[0].Rows[0];
                  //  if (password.Equals(row["passwd"]))
                    {
                        DateTime now = DateTime.Now;
                        row.BeginEdit();
                       // row["last_login_time"] = now;
                        row["last_login_ip"] = ip;
                       // row["update_time"] = now;
                        row.EndEdit();

                        adapter.Update(ds);
                       
                        AdminUser user = new AdminUser();
                        return user;

                    }
                }
                throw new UserNameException("用户名或密码错误");
            }
            catch (DbException ex)
            {
                throw new Exception("数据库错误!", ex);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }


运行正常的方法

  public static void UpdateAboutUs(AboutUs aboutUs)
        {
            DbConnection conn = DataAccess.GetConn();
            try
            {
                String sql = "select top 1 * from ABOUT";
                DbDataAdapter adapter
                    = DataAccess.GetAdapter(conn, sql);

                DbCommandBuilder cmdBuilder = DataAccess.GetCmdBuilder();
                cmdBuilder.DataAdapter = adapter;

                conn.Open();
                DataSet ds = new DataSet();
                adapter.Fill(ds);

                DataRow row = ds.Tables[0].Rows[0];

                row.BeginEdit();
                row["title"] = aboutUs.Title;
                row["keywords"] = aboutUs.Keywords;
                row["description"] = aboutUs.Description;
                row["address"] = aboutUs.Address;
                row["tel"] = aboutUs.Tel;
                row["fax"] = aboutUs.Fax;
                row["email"] = aboutUs.Email;
                row["icp"] = aboutUs.Icp;
                row.EndEdit();

                adapter.Update(ds);
                ds.Clear();
            }
            catch (DbException ex)
            {
                throw new Exception("数据库错误!", ex);
            }
            finally
            {
                if (conn!=null)
                {
                    conn.Close();
                }
            }
        }

2 个解决方案

#1


该回复于2010-09-26 09:48:23被版主删除

#2


怎么解决呢?

#1


该回复于2010-09-26 09:48:23被版主删除

#2


怎么解决呢?