none
我的第一个三层出了问题,学习别人的 RRS feed

  • 问题

  • 以上是 BLL DAL 和 sqlhelptel


    DAL
    C# code


    public class testsql
    {

    public int add_admin(test tet)
    {
    SQLHelper.SQLHelper sqlhelpter
    = new SQLHelper.SQLHelper();

    SqlParameter[] parmlist
    = {
    sqlhelpter.CreateInParam(
    " @names " ,SqlDbType.NVarChar, 10 ,tet.Names),
    sqlhelpter.CreateInParam(
    " @xueli " ,SqlDbType.NVarChar, 10 ,tet.Xueli)

    };
    try
    {
    return (sqlhelpter.RunProc( " ceshi " , parmlist));

    }
    catch (Exception ex)
    {
    throw new Exception(ex.Message, ex);
    }
    }
    }
    }





    BLL
    C# code


    using System;
    using System.Collections.Generic;
    using System.Text;
    using DAL;
    using Model;

    namespace BLL
    {
    public class testsystem
    {

    public int add(test tests)
    {
    testsql sql
    = new testsql();
    return (sql.add_admin(tests));
    }
    }
    }





    C# code

    private SqlConnection myConnection = null ;
    private readonly string RETURNVALUE = " RETURNVALUE " ;


    private void Open()
    {
    // 打开数据库连接
    if (myConnection == null )
    {
    myConnection
    = new SqlConnection(ConfigurationManager.AppSettings[ " SQLCONNECTIONSTRING " ].ToString());
    }
    if (myConnection.State == ConnectionState.Closed)
    {
    try
    {
    /// 打开数据库连接
    myConnection.Open();
    }
    catch (Exception ex)
    {
    SystemError.CreateErrorLog(ex.Message);
    }
    finally
    {
    /// 关闭已经打开的数据库连接
    }
    }
    }


    private SqlCommand CreateProcCommand( string procName, SqlParameter[] prams)
    {
    /// 打开数据库连接
    Open();

    /// 设置Command

    SqlCommand cmd
    = new SqlCommand(procName, myConnection);
    cmd.CommandType
    = CommandType.StoredProcedure;

    /// 添加把存储过程的参数
    if (prams != null )
    {
    foreach (SqlParameter parameter in prams)
    {
    cmd.Parameters.Add(parameter);
    }
    }

    /// 添加返回参数ReturnValue
    cmd.Parameters.Add(
    new SqlParameter(RETURNVALUE, SqlDbType.Int, 4 , ParameterDirection.ReturnValue,
    false , 0 , 0 , string .Empty, DataRowVersion.Default, null ));


    public int RunProc( string procName, SqlParameter[] prams)
    {
    SqlCommand cmd
    = CreateProcCommand(procName, prams);
    try
    {
    /// 执行存储过程
    cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
    /// 记录错误日志
    SystemError.CreateErrorLog(ex.Message);
    }
    finally
    {
    /// 关闭数据库的连接
    Close();
    }

    /// 返回存储过程的参数值
    return ( int )cmd.Parameters[@RETURNVALUE].Value;
    }






    情况是这样的,我断点调试过,其他位置都接受了到值 但是在SqlCommand cmd = new SqlCommand(procName, myConnection); myConnection没有值
    2009年5月21日 9:25

答案

全部回复

  • 你的 myConnection 没有值是因为你在 App.config 中没有设置连接字符串, 还有你最好还是把你的代码整理好再发上来

    知识改变命运,奋斗成就人生!
    2009年5月21日 9:32
    版主
  • 你这代码太乱了,不好看,整理一下吧。。

    另外,三层,不要想的太复杂,只不过是类的设计而已,互相调用,只是一种组件设计的思想而已。。

    低调,低调
    2009年5月21日 10:46
    版主
  • 配置文件(web.config/app.config)的SQLCONNECTIONSTRING节配置正确了吗?
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年5月22日 13:08
    版主
  • 呵呵,你的代码太长了。
    你可以先把代码复制到记事本里,在粘贴到在线文本编辑器里。
    还有不要把三层架构看的有多么难(其实最开始我学习的时候也是认为三层是多么的神圣,^_^),
    他只是一种设计模式,一种能够增加你代码的可维护性的方法。
    设计模式还有很多,你可以到WebCast上看看。里面有很多好东西,你肯定能够收获不少。
    做最好的自己
    2009年5月22日 15:30