 悬赏园豆:20
                [已解决问题] 
            
                    解决于 2014-01-14 10:16
                悬赏园豆:20
                [已解决问题] 
            
                    解决于 2014-01-14 10:16 
                 
        string value = "";
 SqlParameter[] parlist = new SqlParameter[4];
parlist[0] = new SqlParameter("@username", user.Name);
 parlist[1] = new SqlParameter("@passWord", user.Password);
 parlist[2] = new SqlParameter("@Email", user.Email);
 
 SqlParameter sqlpar = new SqlParameter("@value", value);
 sqlpar.Direction = ParameterDirection.Output;
 parlist[3] = sqlpar;
db.ExecuteNonQuery("pro_CreateUserInfo", parlist);//报错
if (sqlpar.Value != null && sqlpar.Value != DBNull.Value)
 value = sqlpar.Value.ToString();
 return value;
这个 我执行到上面报错行的时候怎么老是提示将参数值从 SqlParameter 转换到 String 失败。
我 直接使用sql去执行存储过程是没有问题的,谁能帮我解决一下?
我用了用一种方式 解决了
DbCommand cmd = db.GetStoredProcCommand("pro_CreateUserInfo");
db.AddInParameter(cmd, "username", DbType.String, user.Name);
db.AddInParameter(cmd, "passWord", DbType.String, user.Password);
db.AddInParameter(cmd, "Email", DbType.String, user.Email);
db.AddOutParameter(cmd, "value", DbType.String, 50);
db.ExecuteNonQuery(cmd);
string value = db.GetParameterValue(cmd, "value").ToString();
return value;
但是上边的那个问题还是没有找出为什么会出现提示将参数值从 SqlParameter 转换到 String 失败。 等有空再研究吧!
SqlParameter sqlpar = new SqlParameter("@value", value); 加上typeof(string)试验下
SqlParameter sqlpar = new SqlParameter("@value", typeof (string));
 
 sqlpar.Direction = ParameterDirection.Output;
 sqlpar.Value = value;
 parlist[3] = sqlpar;
还是不行 还是那个错误

参数 赋值可以采用这种方式
也不行 估计是用的using Microsoft.Practices.EnterpriseLibrary.Data;这个dll 的问题
你先不ToString(),看看value是个什么玩意~
是空的
@天空很广阔:是""还是null?你检查下你在存储过程中,有没有对out参数赋值啊!
楼主代码是没问题的,可能是你的存储过程写得不对了
存储过程我直接执行时没有问题的
@天空很广阔: 你这个db是什么?ExecuteNonQuery这个方法可以传参数吗?
@清风伴你行: Microsoft.Practices.EnterpriseLibrary.Data 下的Database 有public virtual int ExecuteNonQuery(string storedProcedureName, params object[] parameterValues);这个方法但是我传入的SqlParameter[] 却不行,这让我很困扰
@天空很广阔: 你为什么要用这个组件呢?用自带的哪个Command执行不行么?
@清风伴你行: 能行 不过这个不需要建立连接等操作, 这个直接能够使用,我用了用一种方式 解决了
DbCommand cmd = db.GetStoredProcCommand("pro_CreateUserInfo");
 db.AddInParameter(cmd, "username", DbType.String, user.Name);
 db.AddInParameter(cmd, "passWord", DbType.String, user.Password);
 db.AddInParameter(cmd, "Email", DbType.String, user.Email);
 db.AddOutParameter(cmd, "value", DbType.String, 50);
 db.ExecuteNonQuery(cmd);
 string value = db.GetParameterValue(cmd, "value").ToString();
 return value;
@天空很广阔: 没用过这个组件,解决了就好,学习了
当时楼主就震惊了,好多人帮忙啊,小学生只能看看!不明觉厉!
The method comments descrip clearly
//
        // Summary:
        //     Executes the storedProcedureName using the given parameterValues and returns
        //     the number of rows affected.
        //
        // Parameters:
        //   storedProcedureName:
        //     The name of the stored procedure to execute.
        //
        //   parameterValues:
        //     An array of paramters to pass to the stored procedure. The parameter values must
        //     be in call order as they appear in the stored procedure.
        //
        // Returns:
        //     The number of rows affected
public virtual int ExecuteNonQuery(string storedProcedureName, params object[] parameterValues);