首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

初学者询问MVC中数据库层有关问题,高手来~

2012-04-08 
菜鸟询问MVC中数据库层问题,高手来~~假设我要输入用户的名字和密码,来更新数据库。这么写:(C/S)这个是放在

菜鸟询问MVC中数据库层问题,高手来~~
假设我要输入用户的名字和密码,来更新数据库。这么写:(C/S)
这个是放在一个方法里面,节约时间就没写。。
SqlConnection   conn   =   new   SqlConnection( "省略 ");
SqlCommand   insertcmd   =   new   SlqCommand( "ProcedureName ",Conn);//ProcedureName     是插入的存储过程名
insertcmd   .CommandType   =   CommandType.StoredProcedure;
insertcmd   .Parameters.Add(...省略).Value   =   @CustomerName;
insertcmd   .Parameters.Add(...省略).Value   =   @CustomerPassWord;
insertcmd   .ExecuteNonQuery();


这么一来就把数据插入到数据库中,但是我觉得这样似乎没能体现面向对象的思想,如果下次我要再写个东西的话,比如是要写用户的电话,用户的家庭地址,那么上面那些参数的输入等都要重写,也就是说这个方法我又要再写一个。。怎么样写才能写的全面点呢?希望高手解决下,或是给个有详细说明的网站地址,谢谢!

[解决办法]
========== 写一个 通用的 数据库操作类======================
namespace Utilities
{

/// <summary>
/// DbAccess类,即进行数据库访问时需要调用的类
/// </summary>
public class DbaseBS
{
//取出数据库连接字符串
public static readonly string conStr = ConfigurationSettings.AppSettings[ "ConnectionString "];

/// <summary>
/// 得到数据库连接对象
/// </summary>
/// <returns> 数据库连接对象 </returns>
public static SqlConnection GetConObject()
{
return new SqlConnection(conStr);
}

/// <summary>
/// 执行操作数据库的存储过程
/// </summary>
/// <param name= "procName "> 存储过程名称 </param>
/// <returns> 存储过程执行后所影响的行数 </returns>
public static int ExecuteNonQuery(string procName)
{
SqlCommand cmd = new SqlCommand();

using (SqlConnection con = GetConObject())
{
CreateCommand(cmd, con, null, procName,null);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return val;
}
}

/// <summary>
/// 执行操作数据库的存储过程
/// </summary>
/// <param name= "procName "> 存储过程名称 </param>
/// <param name= "cmdParms "> 存储过程所使用的参数 </param>
/// <returns> 存储过程执行后所影响的行数 </returns>
public static int ExecuteNonQuery(string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();

using (SqlConnection con = GetConObject())
{
CreateCommand(cmd, con, null, procName, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return val;
}
}

/// <summary>
/// 执行操作数据库的存储过程(事务控制)
/// </summary>
/// <param name= "trans "> 数据库连接所关联的事务对象 </param>
/// <param name= "procName "> 存储过程名称 </param>
/// <param name= "cmdParms "> 存储过程所使用的参数 </param>
/// <returns> 存储过程执行后所影响的行数 </returns>
public static int ExecuteNonQuery(SqlTransaction trans, string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
CreateCommand(cmd, trans.Connection, trans, procName, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return val;
}

/// <summary>
/// 执行读数据集操作,以DataReader的形式返回
/// </summary>
/// <param name= "procName "> 存储过程名称 </param>
/// <param name= "cmdParms "> 存储过程所使用的参数 </param>
/// <returns> DataReader对象 </returns>
public static SqlDataReader ExecuteReader(string procName, SqlParameter[] cmdParms)


{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();

try
{
CreateCommand(cmd, con, null, procName, cmdParms);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr;
}
catch(Exception ex)
{
cmd.Dispose();
Close(con);
throw ex;
}
}

/// <summary>
/// 执行读数据集操作,以DataReader的形式返回
/// </summary>
/// <param name= "procName "> 存储过程名称 </param>
/// <returns> DataReader对象 </returns>
public static SqlDataReader ExecuteReader(string procName)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();

try
{
CreateCommand(cmd, con, null, procName, null);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr;
}
catch(Exception ex)
{
cmd.Dispose();
Close(con);
throw ex;
}
}

/// <summary>
/// 执行读数据集操作,以DataSet的形式返回
/// </summary>
/// <param name= "procName "> 存储过程名称 </param>
/// <param name= "cmdParms "> 存储过程所使用的参数 </param>
/// <returns> DataSet对象 </returns>
public static DataSet ExecuteDataSet(string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();
DataSet ds = new DataSet();

try
{
CreateCommand(cmd, con, null, procName, cmdParms);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
catch(Exception ex)
{
throw ex;
}
finally
{
cmd.Dispose();
Close(con);
}
}


/// <summary>
/// 执行读数据集操作,以DataSet的形式返回
/// </summary>
/// <param name= "procName "> 存储过程名称 </param>
/// <returns> DataReader对象 </returns>
public static DataSet ExecuteDataSet(string procName)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();
DataSet ds = new DataSet();

try
{
CreateCommand(cmd, con, null, procName, null);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
catch(Exception ex)
{
throw ex;
}
finally
{
cmd.Dispose();
Close(con);
}
}

/// <summary>
/// 创建数据库执行命令
/// </summary>
/// <param name= "cmd "> 数据库执行命令对象 </param>
/// <param name= "con "> 数据库连接对象 </param>
/// <param name= "trans "> 数据库事务对象 </param>
/// <param name= "procName "> 存储过程名称 </param>
/// <param name= "cmdParms "> 存储过程所使用的参数数组 </param>
public static void CreateCommand(SqlCommand cmd, SqlConnection con, SqlTransaction trans, string procName, SqlParameter[] cmdParms)
{
if (con.State != ConnectionState.Open)
con.Open();

cmd.Connection = con;
cmd.CommandText = procName;

if (trans != null)
{
cmd.Transaction = trans;


}

cmd.CommandType = CommandType.StoredProcedure;

if (cmdParms != null)
{
foreach(SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}

}

热点排行