关于调用SQL存储过程 25

这是我存储过程的代码:ALTERPROCEDUREPro_Login@LogErrornvarchar(15)output,@LoginIdnvarchar(15),@L... 这是我存储过程的代码:
ALTER PROCEDURE Pro_Login
@LogError nvarchar(15) output,
@LoginId nvarchar(15),
@LoginPwd nvarchar(15)
AS
set @LogError = 'login success'
………………(省略部分无意义的代码)
其中@LogError这个参数是个输出参数,我想通过调用这个存储过程来得到这个参数的值,于是乎我写了一下的类:
public string ExecuteScalar()
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
string r = null;
try
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Pro_Login";
SqlParameter par = cmd.Parameters.Add("@LoginId", SqlDbType.NVarChar);
par.Direction = ParameterDirection.Input;
par.Value = "hhh";
SqlParameter par1 = cmd.Parameters.Add("@LoginPwd", SqlDbType.NVarChar);
par1.Direction = ParameterDirection.Input;
par1.Value = "22222";
SqlParameter par2 = cmd.Parameters.Add("@LogError", SqlDbType.NVarChar);
par2.Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
r = Convert.ToString(par2.Value);
}
catch (System.Data.SqlClient.SqlException ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
return r;
}
}

但是当项目运行到这个类的时候总是中断了,并且指着cmd.ExecuteNonQuery()这一段提示“String[2]: Size 属性具有无效大小值 0。”
这是什么意思,我这个类的代码写的是否正确?麻烦各位给小弟指点迷津,十分十分感谢~~!!
顺便一问,存储过程里面是否得在最后写上return @LogError?(我没写)
展开
 我来答
lijinglong6140
2009-09-14 · TA获得超过138个赞
知道答主
回答量:103
采纳率:100%
帮助的人:79.3万
展开全部
存储过程有返回值么!
返回值也不是这的写了呀!
你的存储过程在SQL执行的时候有问题么!
没问题的话!这个提示就是你传的值有问题!
我这有个我写的执行调用的代码!
给你做个参考!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ss
{
class u1
{
SqlConnection con;
SqlCommand cmd;
u1()
{
string conn = "Data Source=.;Initial Catalog=host;User ID=sa;Password=sa";
con = new SqlConnection(conn);
con.Open();
}
public void pr_cyxf(string us, string cy, int num)
{
cmd = new SqlCommand("pr_cyxf", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@us_idd",SqlDbType.VarChar,5,"us_idd");
cmd.Parameters["@us_idd"].Value = us;
cmd.Parameters.Add("@cy_idd",SqlDbType.VarChar,5,"cy_idd");
cmd.Parameters["@cy_idd"].Value = cy;
cmd.Parameters.Add("@cy_numm",SqlDbType.Int,4,"cy_numm");
cmd.Parameters["@cy_numm"].Value=num;
cmd.ExecuteNonQuery();
}
static void Main(string[] args)
{
u1 a = new u1();
a.cy_info("c205","鲍鱼",800);
a.con.Close();
}
}
还有存储过程的代码!
create proc pr_cyxf
@us_idd varchar(5),
@cy_idd varchar(5),
@cy_numm int
as
declare @us_id varchar(5),@cy_id varchar(5),@cy_num int
set @us_id=@us_idd
set @cy_id=@cy_idd
set @cy_num=@cy_numm
insert into cyxf values(@us_id,@cy_id,@cy_num)
go
kid83
2009-09-14 · TA获得超过2081个赞
知道大有可为答主
回答量:1818
采纳率:0%
帮助的人:1987万
展开全部
SqlParameter par = cmd.Parameters.Add("@LoginId", SqlDbType.NVarChar, 15);

全部都加上大小限制,与你的参数大小对应.不加的话默认是1的字符吧?
存储过程没必要非要在最后return,过程嘛,可以没有返回值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dopsop
2009-09-14 · TA获得超过252个赞
知道小有建树答主
回答量:434
采纳率:0%
帮助的人:235万
展开全部
给cmd添加参数时,不应该这样写,换种写法
SqlParameter[] pars =
{
new SqlParameter("@LoginId",SqlDbType.NVarChar,15),
new SqlParameter("@LoginPwd",SqlDbType.NVarChar,15),
new SqlParameter("@LogError",SqlDbType.NVarChar,15)
}
pars[0].value="hhh";
pars[1].value="222";
pars[2].Direction = ParameterDirection.Output;
cmd.Parameters.AddRange(pars);
con.Open();
cmd.ExecuteNonQuery();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式