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

LZ已经疯了 .net+Access 总是提示有一个参数未赋值,我就120分了,给100分啊。。

--------------------编程问答-------------------- return FuncAccess.ExecuteCmd(sqlStr.ToString()) > 0 ? true : false;
/// <summary>
        /// 执行命令并返回受影响行数
        /// </summary>
        /// <param name="sqlStr">sql语句</param>
        /// <returns>返回受影响行数</returns>
        public static int ExecuteCmd(string sqlStr) {
            OleDbCommand odc = new OleDbCommand(sqlStr, Conn);
            return odc.ExecuteNonQuery();
 
        }
你这里都没有给你在SQL语句中定义的@赋值啊。OleDbParameter你写的这个根本就没有起到任何的作用 --------------------编程问答-------------------- 你的ExecuteCmd方法里没有用到参数化sql



--------------------编程问答--------------------  ExecuteCmd(string sqlStr)这个方法写的有问题 应该写成

  public static int ExecuteCmd(string sqlStr,params  OleDbParameter[] odbParams) {
            OleDbCommand odc = new OleDbCommand(sqlStr, Conn);
            if(odbParams!=null)
           {
              odc.Parameters.AddRange(odbParams);
            }
            return odc.ExecuteNonQuery();
 
        }
--------------------编程问答-------------------- 你的这个方法没有将参数传入:
FuncAccess.ExecuteCmd

重载一个 --------------------编程问答-------------------- 你定义这个odp[] 与你执行的sql有毛关系吗?

return FuncAccess.ExecuteCmd(sqlStr.ToString())你这里没有带参数执行 --------------------编程问答--------------------
引用 5 楼 liuchaolin 的回复:
你定义这个odp[] 与你执行的sql有毛关系吗?

return FuncAccess.ExecuteCmd(sqlStr.ToString())你这里没有带参数执行
--------------------编程问答-------------------- return FuncAccess.ExecuteCmd(sqlStr.ToString(),odp) > 0 ? true : false;

public static int ExecuteCmd(string sqlStr,OleDbParameter[] paras) {
            OleDbCommand odc = new OleDbCommand(sqlStr, Conn);
            if(paras!=null){
                odc.Parameters.AddRange(paras);
            }
            return odc.ExecuteNonQuery();
 
}
--------------------编程问答-------------------- 没有将参数传入 --------------------编程问答--------------------
引用 5 楼 liuchaolin 的回复:
你定义这个odp[] 与你执行的sql有毛关系吗?

return FuncAccess.ExecuteCmd(sqlStr.ToString())你这里没有带参数执行

说的对呀 --------------------编程问答-------------------- 提示未赋值你的数据为null oldDbParameter也是不会添加到里面去的   --------------------编程问答-------------------- Update改写
最后添加
odc.Parameters.AddRange(paras);
return改
return odc.ExecuteNonQuery();
下面的不要了 --------------------编程问答-------------------- 第二个方法中的Openconn()改成你的数据库连接方法


/// <summary>
        /// 对数据库执行删除命令
        /// </summary>
        /// <param name="model">带有数据的实体类对象</param>
        /// <returns>如果受影响行数>0则返回[True],反之则返回[False]</returns>
        public static bool Update(PageTitle model)
        {
            StringBuilder sqlStr = new StringBuilder("Update [PageTitle] Set [Title] = @title, [KeyWords] = @keyWords, [Description] = @description ");
            sqlStr.Append("Where [No] = @no");
            OleDbParameter[] odp = new OleDbParameter[]{
                new OleDbParameter("@title",model.PagTitle),
                new OleDbParameter("@keyWords",model.PagKeyWords),
                new OleDbParameter("@description",model.PagDescription),
                new OleDbParameter("@no",model.PagNo)
            };
            return FuncAccess.ExecuteSQL(sqlStr.ToString(),odp) > 0 ? true : false;
        }


/// <summary>
        /// 执行一条语句,返回受影响的行。
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <param name="cmdParms">参数</param>
        /// <returns>执行一条语句,返回受影响的行。</returns>
        public static int ExecuteSQL(string SQLString, params SqlParameter[] cmdParms)
        {
            using (SqlConnection conn = Openconn())//改成你的数据库连接Conn
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = SQLString;
                    PrepareCommand(cmd, cmdParms);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        #endregion


#region 参数
        private static void PrepareCommand(SqlCommand cmd, SqlParameter[] cmdParms)
        {
            if (cmdParms != null)
            {
                foreach (SqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }
        #endregion 参数
--------------------编程问答-------------------- FuncAccess.ExecuteCmd(sqlStr.ToString()) 

sqlStr.ToString()可能不見得生成你要的 --------------------编程问答--------------------

OleDbParameter[] odp = new OleDbParameter[]{
                new OleDbParameter("@title",model.PagTitle),
                new OleDbParameter("@keyWords",model.PagKeyWords),
                new OleDbParameter("@description",model.PagDescription),
                new OleDbParameter("@no",model.PagNo)
            };

先指定参数类型,然后在赋值。
类似于这样

OleDbCommand oledb_comm = new OleDbCommand();
oledb_comm.CommandText = "select top 1 * from [Pos] where Pos=@Pos";
oledb_comm.Parameters.Add(new OleDbParameter("@Pos", OleDbType.VarChar, 20));//参数类型和长度,和数据库字段的设置一样
oledb_comm.Parameters[0].Value = posname;//posname是一个变量
oledb_comm.ExecuteNonQuery();
--------------------编程问答-------------------- lz调试7遍 ? 该好好补补基础了 --------------------编程问答-------------------- 同上,加油。 --------------------编程问答--------------------
引用 5 楼 liuchaolin 的回复:
你定义这个odp[] 与你执行的sql有毛关系吗?

return FuncAccess.ExecuteCmd(sqlStr.ToString())你这里没有带参数执行

楼主犯傻了,接分 --------------------编程问答--------------------
引用 5 楼 liuchaolin 的回复:
你定义这个odp[] 与你执行的sql有毛关系吗?

return FuncAccess.ExecuteCmd(sqlStr.ToString())你这里没有带参数执行
又看见你了哦 --------------------编程问答--------------------  LZ 已经进院了  --------------------编程问答--------------------
引用 19 楼 dr592112441 的回复:
 LZ 已经进院了 

疯人院 --------------------编程问答-------------------- 楼主过度封装,最终弄成一个垃圾架构。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,