首页 新闻 搜索 专区 学院

将参数值从 SqlParameter 转换到 String 失败

0
悬赏园豆: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去执行存储过程是没有问题的,谁能帮我解决一下?

天空很广阔的主页 天空很广阔 | 初学一级 | 园豆:161
提问于:2014-01-11 14:50
< >
分享
最佳答案
0

我用了用一种方式 解决了

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 失败。 等有空再研究吧!

天空很广阔 | 初学一级 |园豆:161 | 2014-01-14 10:11
其他回答(7)
0

SqlParameter sqlpar = new SqlParameter("@value", value); 加上typeof(string)试验下

收获园豆:5
幕三少 | 园豆:1384 (小虾三级) | 2014-01-11 15:04

SqlParameter sqlpar = new SqlParameter("@value", typeof (string));

sqlpar.Direction = ParameterDirection.Output;
sqlpar.Value = value;
parlist[3] = sqlpar;

 

还是不行 还是那个错误

支持(0) 反对(0) 天空很广阔 | 园豆:161 (初学一级) | 2014-01-11 15:15
0

参数 赋值可以采用这种方式 

收获园豆:5
wolfy | 园豆:2636 (老鸟四级) | 2014-01-11 15:21

也不行 估计是用的using Microsoft.Practices.EnterpriseLibrary.Data;这个dll 的问题

支持(0) 反对(0) 天空很广阔 | 园豆:161 (初学一级) | 2014-01-11 15:48
0

 @wolfy    你这种方式不错。

aehyok | 园豆:1012 (小虾三级) | 2014-01-11 16:49
0

你先不ToString(),看看value是个什么玩意~

收获园豆:5
幻天芒 | 园豆:36781 (高人七级) | 2014-01-11 23:07

是空的

支持(0) 反对(0) 天空很广阔 | 园豆:161 (初学一级) | 2014-01-12 10:37

@天空很广阔:是""还是null?你检查下你在存储过程中,有没有对out参数赋值啊! 

支持(0) 反对(0) 幻天芒 | 园豆:36781 (高人七级) | 2014-01-12 11:13
0

楼主代码是没问题的,可能是你的存储过程写得不对了

收获园豆:5
清风伴你行 | 园豆:153 (初学一级) | 2014-01-12 00:30

存储过程我直接执行时没有问题的

支持(0) 反对(0) 天空很广阔 | 园豆:161 (初学一级) | 2014-01-12 10:37

@天空很广阔: 你这个db是什么?ExecuteNonQuery这个方法可以传参数吗?

支持(0) 反对(0) 清风伴你行 | 园豆:153 (初学一级) | 2014-01-12 10:49

@清风伴你行: Microsoft.Practices.EnterpriseLibrary.Data 下的Database 有public virtual int ExecuteNonQuery(string storedProcedureName, params object[] parameterValues);这个方法但是我传入的SqlParameter[] 却不行,这让我很困扰

支持(0) 反对(0) 天空很广阔 | 园豆:161 (初学一级) | 2014-01-13 09:55

@天空很广阔: 你为什么要用这个组件呢?用自带的哪个Command执行不行么?

支持(0) 反对(0) 清风伴你行 | 园豆:153 (初学一级) | 2014-01-13 21:54

@清风伴你行: 能行 不过这个不需要建立连接等操作, 这个直接能够使用,我用了用一种方式 解决了

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;

支持(0) 反对(0) 天空很广阔 | 园豆:161 (初学一级) | 2014-01-14 10:10

@天空很广阔: 没用过这个组件,解决了就好,学习了

支持(0) 反对(0) 清风伴你行 | 园豆:153 (初学一级) | 2014-01-14 20:00
0

当时楼主就震惊了,好多人帮忙啊,小学生只能看看!不明觉厉!

贫民窟大侠 | 园豆:4276 (老鸟四级) | 2014-01-13 10:51
0

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);

HelloHongfu | 园豆:47 (初学一级) | 2018-04-17 15:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册