小弟新手,遇到一个问题没弄明白:
请看代码:
网页内代码:
 Entity.FunctionEntity fe = new Entity.FunctionEntity();
    DataAccess.FunctionDataAccess fda = new DataAccess.FunctionDataAccess();
    protected void Button1_Click(object sender, EventArgs e)
    {
        fe.FunctionName = this.tbPositionName.Text.ToString();
        fe.FunctionExplain = this.tbPositionExplain.Text.ToString();
        if (fda.PositionNameIsSelect(fe) == false)
        {
            if (fda.PositionNameAdd(fe) == true)
                Response.Write("<script>window.alert('操作成功!')</script>");
            else
                Response.Write("<script>window.alert('操作失败!')</script>");
        }
        else
            Response.Write("<script>window.alert('此职位已存在!')</script>");
    }
封装类文件的PositionNameAdd方法:
 //增加职位
        public bool PositionNameAdd(Entity.FunctionEntity fe)
        {
            SqlParameter[] p=new SqlParameter[2];
            p[0]=new SqlParameter("FunctionName",SqlDbType.Char,50);
            p[0].Value=fe.FunctionName;
            p[1]=new SqlParameter("FunctionExplain",SqlDbType.VarChar,200);
            p[1].Value=fe.FunctionExplain;
            if(dc.CompanyExe("FunctionNameInsert",p)==true)
                return true;
            else
                return false;
        }
数据成员类:
namespace Entity
{
    public class FunctionEntity
    {
        int functionid;
        string functionname;
        string functionexplain;        public FunctionEntity()
        {
            functionid = 0;
            functionname = string.Empty;
            functionexplain = string.Empty;
        }        public int FunctionID
        {
            get { return functionid; }
            set { functionid = value; }
        }        public string FunctionName
        {
            get { return functionname; }
            set { functionname = value; }
        }        public string FunctionExplain
        {
            get { return functionexplain; }
            set { functionexplain = value; }
        }        
    }}
数据库非查询操作方法:
  //执行带参数的更新操作        public bool CompanyExe(string sql, SqlParameter[] p)
        {
            try
            {
                con.ConnectionString = sqlstring;
                con.Open();
                com.Connection = con;
                com.CommandType = CommandType.StoredProcedure;
                com.CommandText = sql;
                for (int i = 0; i < p.GetLength(0); i++)
                {
                    com.Parameters.Add(p[i]);
                }
                int result = com.ExecuteNonQuery();
                if (result > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (SqlException)
            {
                return false;
            }
            finally
            {
                con.Close();
                con.Dispose();
                com.Dispose();
            }
           
        }
存储过程:
ALTER procedure [dbo].[FunctionNameInsert]
@FunctionName char(50),
@FunctionExplain varchar(200)
as
begin 
insert into Functions  (FunctionName,FunctionExplain)
values (@FunctionName,@FunctionExplain);
end现在问题是插入数据操作不成功,现在问题是插入数据操作不成功,经调试P中参数有两个,而com.Parameters[]有三个:P[0].value="职位",p[1].value="说明"com.Parameters[0].value="职位",
com.Parameters[1].value="职位",
com.Parameters[2].value="说明",错误是:数据库非查询操作方法:
  //执行带参数的更新操作
        public bool CompanyExe(string sql, SqlParameter[] p)出错,数据库中,我用EXEC 执行过存储过程没问题,类中参数传递也调试过没发现问题!
想知道插入数据不成功是不是上面说的问题!
再就是调试代码到下面直接抛出异常!
 int result = com.ExecuteNonQuery();
                if (result > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (SqlException)
            {
                return false;
            }
            finally
            {
                con.Close();
                con.Dispose();
                com.Dispose();
            }
sqlinsert

解决方案 »

  1.   

    for (int i = 0; i < p.GetLength(0); i++)
    {
        com.Parameters.Add(p[i]);
    }
    这三句改成
    com.Parameters.Clear();
    for (int i = 0; i < p.Length; i++)
    {
        com.Parameters.Add(p[i]);
    }
      

  2.   

    楼上大哥,请问 p.GetLength(0);这获得指定维数的元素个数,为什么就不行呢?按理说P[]只有一维啊?
      

  3.   

    一维获取长度是.Length
    不是.GetLength(0)
      

  4.   

    .GetLength(0) 不是指当前维中的元素个数??