昨晚在练习ASP.NET数据库操作方法是遇到了下面一个问题:在该程序中,需要调用一个存储过程,而该存储过程是返回参数的。该存储过程的功能是:当我给定输入参数后,该存储过程会根据输入参数对相应的表进行检索,选出符合条件的记录,然后通过返回参数返回。先请大家看看下面表的结构和存储过程(该存储过程经语法检验是正确的,而且在查询分析器中执行该存储过程后结果也是正确的),然后请大家帮我看看我的C#代码,为什么执行到A句就产生异常了!
谢谢!Notes表结构:name与time共同形成主键
列名 类型 长度 可以为空
name varchar 50 N
time datetime 8 N
weather varchar 50 Y
content varchar 50 Y存储过程proGetNote,
作用:根据输入参数@name,@time的值查询出合乎条件的记录后然后返回给输出参@oname,@otime,@oweatherCREATE procedure proGetNote
@name varchar(50),
@time datetime,
@oname varchar(50) output ,
@otime datetime output,
@oweather varchar(50) output,
@ocontent varchar(50) output
as
select @oname=name,@otime=time,@oweather=weather,@ocontent=content from Notes where name=@name and time=@time
GO
下面是C#的代码:执行到下面的A句时就产生了异常,为什么?
private void btnGetContent_Click(object sender, System.EventArgs e)
{
try
{
SqlConnection mySqlConnection=newSqlConnection(@"server=PM\MYSERVER;database=Notebook;uid=1;pwd=1");
mySqlConnection.Open(); SqlCommand mySqlCommand=new SqlCommand("proGetNote",mySqlConnection);
mySqlCommand.CommandType=CommandType.StoredProcedure; //给存储过程添加输入参数
mySqlCommand.Parameters.Add("@name",SqlDbType.VarChar);
mySqlCommand.Parameters.Add("@time",SqlDbType.DateTime); //给添加的输入参数赋值
mySqlCommand.Parameters["@name"].Value="pm";
mySqlCommand.Parameters["@time"].Value="2005-03-11"; //由于该调用的存储过程是返回参数的,所以用下面的方法
SqlDataReader mySqlDataReader=mySqlCommand.ExecuteReader(); // A句,执行到这里就产生异常了 //从SqlDataReader对象中读出记录
while(mySqlDataReader.Read())
{
lblDate.Text=mySqlDataReader["time"].ToString();
txtContent.Text=mySqlDataReader["content"].ToString();
} mySqlDataReader.Close();
mySqlConnection.Close();
}
catch
{
Response.Write("<script language='javascript'>alert('有问题,不能打开!')</script>");
}
}请问上面的代码是哪里出现问题了?昨晚头都大了!哎......
请大家帮帮我吧!谢谢了!
谢谢!Notes表结构:name与time共同形成主键
列名 类型 长度 可以为空
name varchar 50 N
time datetime 8 N
weather varchar 50 Y
content varchar 50 Y存储过程proGetNote,
作用:根据输入参数@name,@time的值查询出合乎条件的记录后然后返回给输出参@oname,@otime,@oweatherCREATE procedure proGetNote
@name varchar(50),
@time datetime,
@oname varchar(50) output ,
@otime datetime output,
@oweather varchar(50) output,
@ocontent varchar(50) output
as
select @oname=name,@otime=time,@oweather=weather,@ocontent=content from Notes where name=@name and time=@time
GO
下面是C#的代码:执行到下面的A句时就产生了异常,为什么?
private void btnGetContent_Click(object sender, System.EventArgs e)
{
try
{
SqlConnection mySqlConnection=newSqlConnection(@"server=PM\MYSERVER;database=Notebook;uid=1;pwd=1");
mySqlConnection.Open(); SqlCommand mySqlCommand=new SqlCommand("proGetNote",mySqlConnection);
mySqlCommand.CommandType=CommandType.StoredProcedure; //给存储过程添加输入参数
mySqlCommand.Parameters.Add("@name",SqlDbType.VarChar);
mySqlCommand.Parameters.Add("@time",SqlDbType.DateTime); //给添加的输入参数赋值
mySqlCommand.Parameters["@name"].Value="pm";
mySqlCommand.Parameters["@time"].Value="2005-03-11"; //由于该调用的存储过程是返回参数的,所以用下面的方法
SqlDataReader mySqlDataReader=mySqlCommand.ExecuteReader(); // A句,执行到这里就产生异常了 //从SqlDataReader对象中读出记录
while(mySqlDataReader.Read())
{
lblDate.Text=mySqlDataReader["time"].ToString();
txtContent.Text=mySqlDataReader["content"].ToString();
} mySqlDataReader.Close();
mySqlConnection.Close();
}
catch
{
Response.Write("<script language='javascript'>alert('有问题,不能打开!')</script>");
}
}请问上面的代码是哪里出现问题了?昨晚头都大了!哎......
请大家帮帮我吧!谢谢了!
解决方案 »
- web 报表制作 求教
- 新手问题:如何在web.config中常量的配置与读取
- WebBrowser生成图片的问题,请教大家!
- ASP.NET后台动态添加一个Table控件。后面用FindControl找不到它并且没提示错误,接收新控件的新实例Table显示值为NULL。
- 邮箱登陆和回车提交的问题
- 请问如何确保b.html必须是经过a.aspx弹出的?不能直接访问b.html?
- 求 解密函数!
- 如何通过js文件链接到.net程序(急等)
- 各位 问一下 什么是 web.config 为什么要这个东西
- 如何在此加参数??? 请多多指教了,小小Kiss了, 等!!!!!
- 分数不是问题,高手请进,please!
- Asp.net(c#) 为什么提示“缺少using指令”,请教大虾。
mySqlCommand.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,50));
mySqlCommand.Parameters.Add(new SqlParameter("@time",SqlDbType.DateTime,8));
==>
mySqlCommand.Parameters["@time"].Value= DateTime.Parse("2005-03-11");还有,你应该通过参数获取值,而不是SqlDataReader
你要懒的活,试试SqlConnection mySqlConnection=newSqlConnection(@"server=PM\MYSERVER;database=Notebook;uid=1;pwd=1");try
{
mySqlConnection.Open(); SqlCommand mySqlCommand=new SqlCommand("proGetNote",mySqlConnection);
mySqlCommand.CommandType=CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters( mySqlCommand); mySqlCommand.Parameters["@name"].Value="pm";
mySqlCommand.Parameters["@time"].Value= DateTime.Parse("2005-03-11"); mySqlCommand.ExecuteNonQuery();
}
finally
{
mySqlConnection.Close();
} Response.Write(mySqlCommand.Parameters["@oname"].Value);
SqlConnection mySqlConnection=newSqlConnection(@"server=PM\MYSERVER;database=Notebook;uid=1;pwd=1");
SqlCommand mySqlCommand=new SqlCommand("proGetNote",mySqlConnection);try
{
mySqlConnection.Open(); mySqlCommand.CommandType=CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters( mySqlCommand);
mySqlCommand.Parameters["@name"].Value="pm";
mySqlCommand.Parameters["@time"].Value= DateTime.Parse("2005-03-11"); mySqlCommand.ExecuteNonQuery();
}
finally
{
mySqlConnection.Close();
} Response.Write(mySqlCommand.Parameters["@oname"].Value);
但我只需要两个输入参数就可以,而且在存储过程中也是这样写的。
我的这段程序的目的是将查询出来的结果分别写到几个TextBox.text中,请问在执行完你上面的程序后,我应该怎样写呢?
比如:
txtName.Text=....//将查询出来的记录的name字段值显示出来,下面的也一样是显示其它几个字段值
txtTime.Text=...//
txtWeather.Text=...//
txtContent.Text...//谢谢你们了!
麻烦你们再看一看!
SqlConnection mySqlConnection=newSqlConnection(@"server=PM\MYSERVER;database=Notebook;uid=1;pwd=1");
mySqlConnection.Open(); mySqlCommand.CommandType=CommandType.StoredProcedure;
SqlCommand mySqlCommand=new SqlCommand("proGetNote",mySqlConnection);
//给存储过程添加输入参数
SqlParameter nameinput=mySqlCommand.Parameters.Add("@name",SqlDbType.VarChar);
nameinput.Direction=ParameterDirection.Input;
SqlParameter timeinput=mySqlCommand.Parameters.Add("@time",SqlDbType.DateTime);
timeinput.Direction=ParameterDirection.Input;
*******对输出参数进行类似设置,只须改为ParameterDirection.Output
SqlParameter nameoutput=mySqlCommand.Parameters.Add("@oname",SqlDbType.VarChar);
nameoutput.Direction=ParameterDirection.Output;
SqlParameter timeoutput=mySqlCommand.Parameters.Add("@otime",SqlDbType.DateTime);
nameoutput.Direction=ParameterDirection.Output;
SqlParameter weatheroutput=mySqlCommand.Parameters.Add("@oweather",SqlDbType.VarChar);
nameoutput.Direction=ParameterDirection.Output;
SqlParameter contentoutput=mySqlCommand.Parameters.Add("@ocontent",SqlDbType.VarChar);
nameoutput.Direction=ParameterDirection.Output;
//给添加的输入参数赋值
nameinput.Value="pm";
timeinput.Value=DateTime.Parse("2005-03-11"); *******SqlDataReader mySqlDataReader=mySqlCommand.ExecuteReader(); // A句,执行到这里就产生异常了
*******改为SqlDataReader mySqlDataReader=mySqlCommand.ExecuteNonQuery();
*******我对你的那种存储过程不太懂,但我想用mySqlCommand.ExecuteNonQuery()应能返回结果的第一个记录
*******第一个记录的各字段将存于对应的输出参数中 lblDate.Text=Convert.ToString(timeoutput.Value);
txtContent.Text=Convert.ToString(contentoutput.Value);
mySqlDataReader.Close();
mySqlConnection.Close();
思归大哥的方法需要学习下。^_^