大家帮我看看这样写错在哪里??

pinglv 2004-07-19 06:29:21
mycon.ConnectionString = PublicVar.GstrCon;
SqlCommand cmd = new SqlCommand("GetMailbox",mycon);
mycon.ConnectionString = PublicVar.GstrCon;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection.Open();
cmd.Parameters.Add("@EmpID",SqlDbType.Int);
cmd.Parameters["@EmpID"].Value = empid;
cmd.Parameters.Add("@MailboxID",SqlDbType.Int);
cmd.Parameters["@MailboxID"].Value = mailboxid;
SqlDataReader myReader;
myReader = cmd.ExecuteReader();
string smtp= myReader["@smtp"].ToString().Trim();
string user = myReader["@user"].ToString().Trim();
cmd.Connection.Close();
cmd.Dispose();

我的存储过程这样定义的:
CREATE procedure GetMailbox (@EmpID int,@MailboxID int) as
declare @smtp char(50)
declare @user char(20)
declare @userpwd char(20)
declare @mailbox char(100)
declare @smtpport int
declare @pop char(50)
declare @popport int

select @smtp = smtpserver,@user = username,@userpwd = userpwd,
@mailbox = mailbox,@smtpport = smtpport,@pop = popserver,@popport = popport
from mailbox
where empid = @EmpID and mailboxid = @MailboxID
return
go
...全文
90 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2004-07-21
  • 打赏
  • 举报
回复
存储过程:
select xxx as xxx1 from table
cs:
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter( cmd );
sda.Fill(dt);
string pwd = dt.Rows[0]["xxx1"];
另外你试着在查询分析器里执行一下
declare @xxx int
select @xxx = 表的列名 from 你的表
看可不可以?你就明白为什么拉。

pinglv 2004-07-21
  • 打赏
  • 举报
回复
那如果我不用select @xxx = xxx from table_a

我怎么得到我想要的xxx的值呢?
pinglv 2004-07-21
  • 打赏
  • 举报
回复
我已经把存储过程改了呀!

我的存储过程:
CREATE procedure GetMailbox (@EmpID int,@MailboxID int,@smtp char(30) out,@user char(20) out,@userpwd char(20) out,@mailbox char(100) out, @smtpport int out,
@pop char(50) out,@popport int out)
as
select @smtp = smtpserver,@user = username,@userpwd = userpwd,
@mailbox = mailbox,@smtpport = smtpport,@pop = popserver,@popport = popport
from mailbox where empid = @EmpID and mailboxid = @MailboxID
go
pinglv 2004-07-20
  • 打赏
  • 举报
回复
hdt(千金散近还复来,一给就是200分)

能麻烦说清楚些吗?我现在应该怎么改?

谢谢啊。
真相重于对错 2004-07-20
  • 打赏
  • 举报
回复
这种情况不要用输出参数直接用列名

pinglv 2004-07-20
  • 打赏
  • 举报
回复
打印异常显示:

参数 2: String 类型的“@smtp”,Size 属性具有无效大小值
pinglv 2004-07-20
  • 打赏
  • 举报
回复
谢谢楼上二位了!

我把我的代码和存储过程都修改了一下。还有出现错误了,麻烦再给我看一下吧。
//调用存储过程取出该邮箱的设置
mycon.ConnectionString = PublicVar.GstrCon;
SqlCommand cmd = new SqlCommand("GetMailbox",mycon);
mycon.ConnectionString = PublicVar.GstrCon;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection.Open();
cmd.Parameters.Add("@EmpID",SqlDbType.Int);
cmd.Parameters["@EmpID"].Value = empid;
cmd.Parameters.Add("@MailboxID",SqlDbType.Int);
cmd.Parameters["@MailboxID"].Value = mailboxid;
//输出参数
cmd.Parameters.Add("@smtp",SqlDbType.Char);
cmd.Parameters["@smtp"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@user",SqlDbType.Char);
cmd.Parameters["@user"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@userpwd",SqlDbType.Char);
cmd.Parameters["@userpwd"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@mailbox",SqlDbType.Char);
cmd.Parameters["@mailbox"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@smtpport",SqlDbType.Char);
cmd.Parameters["@smtpport"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@pop",SqlDbType.Char);
cmd.Parameters["@pop"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@popport",SqlDbType.Char);
cmd.Parameters["@popport"].Direction = ParameterDirection.Output;

cmd.ExecuteNonQuery(); //执行到这一句就报错,跟踪调试,发现"cmd"超出范围
string smtp= cmd.Parameters["@smtp"].Value.ToString().Trim();
string user = cmd.Parameters["@user"].Value.ToString().Trim();
int smtpport = (int)cmd.Parameters["@smtpport"].Value;
string pwd = cmd.Parameters["userpwd"].Value.ToString().Trim();
string pop = cmd.Parameters["pop"].Value.ToString().Trim();
int popport = (int)cmd.Parameters["popport"].Value;
string mailbox = cmd.Parameters["mailbox"].Value.ToString().Trim();
cmd.Connection.Close();
cmd.Dispose();

我的存储过程:
CREATE procedure GetMailbox
(@EmpID int,@MailboxID int,@smtp char(30) out,@user char(20) out,
@userpwd char(20) out,@mailbox char(100) out, @smtpport int out,
@pop char(50) out,@popport int out) as
select @smtp = smtpserver,@user = username,@userpwd = userpwd,
@mailbox = mailbox,@smtpport = smtpport,@pop = popserver,@popport = popport
from mailbox where empid = @EmpID and mailboxid = @MailboxID
go
真相重于对错 2004-07-20
  • 打赏
  • 举报
回复
select XXX from yyy
形式是返回结果集
你用
select @var = xxx from yyy
是不正确的
Overriding 2004-07-19
  • 打赏
  • 举报
回复
那个参数不是输入参数也不是返回值肯定不能那样得到的啊!
在你的存储过程中给对应的参数加上output,如果是多个只能这样,如果是一个可以用return
pinglv 2004-07-19
  • 打赏
  • 举报
回复
哦。执行到这一句就出错了:

string smtp= myReader["@smtp"].ToString().Trim();

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧