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

==========================调用函数之-参数传递有关问题===================================

2012-01-10 
调用函数之------参数传递问题数据层:pub

==========================调用函数之------参数传递问题===================================
数据层:
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根据你的数据库字段类型来确定

热点排行