读书人

==========================调用函数之

发布时间: 2012-01-10 21:26:50 作者: rapoo

==========================调用函数之------参数传递问题===================================
数据层:
public static SqlDataReader ExecuteReader(string sql, SqlParameter[] parmeters)
{
cn = new SqlConnection(Conn);
cmd = new SqlCommand(sql, cn);
if (parmeters != null)
{
foreach (SqlParameter parmeter in parmeters)
{
cmd.Parameters.Add(parmeter);
}
}
try
{
if (cn.State != ConnectionState.Connecting)
cn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr;
}
catch
{
cn.Close();
throw;
}
}
--------------------------
我要在其他层调用这个函数,比如:要传用户名和密码2个参数过去,
已知:
@username(参数名)、SqlDbType.Varchar,50(类型)、name(获得的值)
@userpwd(参数名)、SqlDbType.Varchar,40(类型)、pwd(获得的值)
如何调用?

[解决办法]
用数组传过去了,SqlDataReade myreader=ExecuteReader(string mysql, SqlParameter[] parmeters)

------解决方案--------------------


public SqlDataReader GetSingleUser(int nUserID)
{
//定义数据库的Connection and Command
SqlConnection myConnection = new SqlConnection(SQLCONNECTIONSTRING);
SqlCommand myCommand = new SqlCommand( "Pr_GetSingleUser ",myConnection);

//定义访问数据库的方式为存储过程
myCommand.CommandType = CommandType.StoredProcedure;

//添加储存过程的参数
SqlParameter parameterUserID = new SqlParameter( "@UserID ",SqlDbType.Int,4);
parameterUserID.Value = nUserID;
myCommand.Parameters.Add(parameterUserID);

SqlDataReader dr = null;

try
{
//打开数据库的连接
myConnection.Open();
}
catch(Exception ex)
{
throw new Exception( "数据库连接失败! ",ex);
}

try
{
//执行数据库的存储过程(访问数据库)
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception ex)
{
throw new Exception(ex.Message,ex);
}

//返回 dr
return dr;
}
自己根据这个格式改改
[解决办法]
貌似SqlDbType.Varchar,50(类型)没有传过去?=======是的,不写也可,因为是简写的,所以没有传.
[解决办法]
SqlParameter[] sqlParams = new SqlParameter[2];
sqlParams[0] = new SqlParameter( "@username ");
sqlParams[0].Value = "... ";
sqlParams[1] = new SqlParameter( "@userpwd ");
sqlParams[1].Value = "... ";
SqlDataReader dr = ExecuteReader( "select * from table t where t.username = @username and userwd = @userpwd ", sqlParams);
[解决办法]
具体的SqlDbType根据你的数据库字段类型来确定

读书人网 >asp.net

热点推荐