2014-03-27 41 views
0

我使在线应用程序将员工信息存储在MS SQL中,我使用Disconnected模型,并在Form_Load事件中为“DataSet配置”创建我的类并调用其中的方法。 这是类数据集在asp.net中不工作webforms

public static string constr = ConfigurationManager.ConnectionStrings [“cnn1”]。ConnectionString;

public static DataSet GetDataSet(string stored_name, string table_name, params SqlParameter[] prmarr) 
{ 
    SqlConnection con = new SqlConnection(constr); 
    SqlCommand cmd = new SqlCommand(stored_name, con); 
    foreach (SqlParameter prm in prmarr) 
    { 
     cmd.Parameters.Add(prm); 
    } 
    cmd.CommandType = CommandType.StoredProcedure; 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, table_name); 

    return ds; 

我的“web.config”

设置连接字符串到现在为止所有的东西是好的,但是当我做插入数据“数据集” 出现错误消息 对象引用未设置为一个实例的一个对象。

这是我在插入按钮键入代码

int max = 0; 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     if ((int)dr["Emp_Id"] > max) 
     { 
      max = (int)dr["Emp_Id"]; 
     } 
    } 


    DataRow drnew = ds.Tables["x"].NewRow(); 
    drnew["Emp_Id"] = ++max; 
    drnew["First_Name"] = txtfname.Text; 
    drnew["Last_Name"] = txtlname.Text; 
    drnew["Country"] = drpboxcoun.SelectedValue; 
    drnew["Email"] = txtemail.Text; 
    drnew["Experience_Years"] = txtexper.Text; 
    drnew["Current_Salary"] = txtcursal.Text; 
    drnew["Expected_Salary"] = txtexpsal.Text; 

    ds.Tables["x"].Rows.Add(drnew); 

问题出在哪里!

+0

我很欣赏你可能是新来枚举节目。你的代码的一个问题是,在你创建1000名员工之后,你将不得不加载和循环1000行以获得〜next Employee的new_id。这不是非常有效。 – granadaCoder

+0

是的,我更新编程,但循环它的问题我评论这部分和问题仍然存在 –

+0

很可能你有一个数据类型问题。字符串不是整数,整数不是字符串。使用变量来存储值... current_salary和expected_salary不是字符串..我会想。 – granadaCoder

回答

0

我granadaCoder同意对数据类型问题
添加尝试捕捉或跟踪它...
当你加入到这个数据集,你保存到数据库这些“FORM feelds”?

这里一些代码,我做

public class myDAL 
    { 

     /// <summary> 
     /// Collection of SqlParameter 
     /// </summary> 
     public System.Collections.Generic.List<SqlParameter> __paramList = new System.Collections.Generic.List<SqlParameter>(); 
    /// <summary> 
    /// AddParameter - myDAL.AddParameter(@"@_" + ParamName.ToString(), value, sqlDatatype, System.Data.ParameterDirection.Input); 
    /// </summary> 
    /// <param name="_paramname"></param> 
    /// <param name="_paramvalue"></param> 
    /// <param name="_paramtype"></param> 
    /// <param name="_ParameterDirection"></param> 
    /// <remarks></remarks> 
    public void AddParameter(string _paramname, object _paramvalue, System.Data.SqlDbType _paramtype, ParameterDirection _ParameterDirection) 
    { 
     SqlParameter param = new SqlParameter(_paramname, _paramtype); 
     param.Direction = _ParameterDirection;   
     param.Value = _paramvalue; 
     __paramList.Add(param); 
    } 

    /// <summary> 
    /// ParametersClear __paramList.Clear(); 
    /// </summary> 
    public void ParametersClear() 
    { 
     __paramList.Clear(); 
    } 


    public dataset Here returnDataSetSnippet(out bool hasError){ 

    //JUST REDO WITH DATASET 


    using (SqlConnection conn = new SqlConnection(getConnection.ConnectionString())) 
     { 
      using (SqlCommand mySqlCommand = new System.Data.SqlClient.SqlCommand()) 
      { 
       try 
       { 
        conn.Open(); 
        mySqlCommand.Connection = conn; 
        mySqlCommand.CommandType = CommandType.StoredProcedure; 
        foreach (SqlParameter p in __paramList) 
        { 
         mySqlCommand.Parameters.Add(p); 

        } 

       SqlDataReader dbReader = mySqlCommand.ExecuteReader(); 
        if (dbReader.Read()) 
        { 
         c1 = dbReader["c1"].ToString(); 
         c2 = dbReader["c2"].ToString(); 
         hasError = false; 
        } 

        dbReader.Close(); 
       } 
       catch (Exception ex) 
       { 
        hasError = true; 
        //LOG HERE 

       } 
      } // end using 
     }// end using 
     return myDataSet; 


      } 


} 

这里是使用

 public myDAL = new myDAL(); 

     System.Data.SqlDbType sqlDatatype = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), EnumHelper.EnumDescription(Req_Param), true); 

    myDAL.AddParameter(@"@_" + Req_Param.ToString(), value, sqlDatatype, System.Data.ParameterDirection.Input); 

我有同类型

public enum require_params 
    { 

     [Description("Int")] 
     UserStatus, 
     [Description("TinyInt")] 
     Mode 
    } 


    public static class EnumHelper 
    { 

    public enum Speed 
    { 
     [Description("5 metters per second")] 
     Five = 5, 
     [Description("10 metters per second")] 
     Ten = 10, 
     [Description("15 metters per second")] 
     Fifteen = 15, 
     [Description("20 metters per second")] 
     Twenty = 20, 
     //[Description("25 metters per second")] 
     TwentyFive = 25, 
     [Description("30 metters per second")] 
     Thirty = 30 
    } 

    /// <summary> 
    /// get the string value of Enum Attribute 
    /// </summary> 
    /// <param name="EnumConstant"></param> 
    /// <returns> 
    /// string enumDesctiption = EnumHelper.EnumDescription(EnumHelper.Speed.Thirty); 
    /// enumDesctiption = EnumHelper.EnumDescription(DayOfWeek.Monday); when there is no desc returns as string the ENUM property 
    /// </returns> 
    public static string EnumDescription(Enum EnumConstant) 
    { 
     System.Reflection.FieldInfo fi = EnumConstant.GetType().GetField(EnumConstant.ToString()); 
     DescriptionAttribute[] aattr = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
     if (aattr.Length > 0) 
     { 
      return aattr[0].Description; 
     } 
     else 
     { 
      return EnumConstant.ToString(); 
     } 
    } 



} 
+0

Valentin Petkov 我有另一部分代码用于实际数据库的存储过程,我对错误进行了跟踪(大点),并且发现错误发生在这条线上:DataRow drnew = ds.Tables [“x “] .NewRow(); 我想尝试Disconnected模型方法,因为它是这个任务中所需的方法,我欣赏你的代码,我会尝试在我的下一个任务(连接模型) 但直到现在我仍然面临同样的问题。 –

+0

尝试打印表名可能“x”不是正确的一个http://msdn.microsoft.com/en-us/library/system.data.datatable.tablename.aspx –

+0

您可以使用计算简短查找您的MAX int max = Convert.ToInt32(dt.Compute(“max(Emp_Id)”,string.Empty)); http://msdn.microsoft.com/en-us/library/system.data.datatable.compute.aspx –

相关问题