从数据读取信息时候遇到了'必须声明变量'的问题

lanfeng214231075 2009-04-11 09:54:09

各位大大们请帮我分析下错误的原因和位置啊,我个人初步判断错误的根是在adapter.Fill(ds, "dbuser")内,因为去除了这句就没有了错误提示,可是程序也没有用了。苦恼中,谢谢了。
程序如下

protected void Button1_Click(object sender, EventArgs e)
{

String cos = "Server=localhost;database=qzs;uid=qzs;pwd=qzs";

SqlConnection co = new SqlConnection(cos);

co.Open();

String commandText = "select * from dbuser where username = @username and password = @password ";

SqlCommand cm = new SqlCommand(commandText, co);

cm.Parameters.Add("@username", SqlDbType.VarChar);

cm.Parameters["@username"].Value = Txtname.Text;

cm.Parameters.Add("@password", SqlDbType.VarChar);

cm.Parameters["@password"].Value = txtpassword.Text;

SqlDataAdapter adapter = new SqlDataAdapter(commandText, co);

DataSet ds = new DataSet();

adapter.Fill(ds, "dbuser");
}



点击启动时候没有问题,可是输入用户名和密码,再点登陆的时候跳出了错误。

错误提示如下

必须声明变量 '@username'。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 必须声明变量 '@username'。

源错误:


行 47: DataSet ds = new DataSet();
行 48:
行 49: adapter.Fill(ds, "dbuser");
行 50:
行 51:


源文件: c:\Inetpub\wwwroot\xuexi\Default.aspx.cs 行: 49

堆栈跟踪:


[SqlException (0x80131904): 必须声明变量 '@username'。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +857418
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +735030
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +188
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1838
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +31
System.Data.SqlClient.SqlDataReader.get_MetaData() +62
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +886
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +132
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +122
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +7
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +141
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +137
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +83
_Default.Button1_Click(Object sender, EventArgs e) in c:\Inetpub\wwwroot\xuexi\Default.aspx.cs:49
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102





...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanfeng214231075 2009-04-11
  • 打赏
  • 举报
回复
请各位大哥帮忙解答一下,小弟新人刚来,没有分给,请体谅下
IamHandsomeman 2009-04-11
  • 打赏
  • 举报
回复
你是没有把

sqlAdapter 添加参数吧,所以出现这个问题
springwbq 2009-04-11
  • 打赏
  • 举报
回复
sqlAdapter.SelectCommand.Parameters.Add("@username", SqlDbType.VarChar, 20).Value = Txtname.Text;
这里的20和你在数据库中的UserName varchar(20) 是一样的!
细心点,自己能搞懂得
lanfeng214231075 2009-04-11
  • 打赏
  • 举报
回复
能说说为什么改成了“20”就可以了吗?
lanfeng214231075 2009-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cja03 的回复:]
C# code
protected void Button1_Click(object sender, EventArgs e)
{
string connectionString= "Server=localhost;database=qzs;uid=qzs;pwd=qzs";
string commandText = "select * from dbuser where username = @username and password = @password ";

SqlDataAdapter sqlAdapter = new SqlDataAdapter(commandText, connectionString);

[/Quote]




谢谢cja03(小黑)大哥,已经成功了。听了深海之蓝大哥说新人也有分的,我试了下帖子加分,说明天才能,那我等明天给帖子加了分后再来结题。
深海之蓝 2009-04-11
  • 打赏
  • 举报
回复
新人是 有分的,换个其他接口吧。。。
cja03 2009-04-11
  • 打赏
  • 举报
回复

protected void Button1_Click(object sender, EventArgs e)
{
string connectionString= "Server=localhost;database=qzs;uid=qzs;pwd=qzs";
string commandText = "select * from dbuser where username = @username and password = @password ";

SqlDataAdapter sqlAdapter = new SqlDataAdapter(commandText, connectionString);
sqlAdapter.SelectCommand.Parameters.Add("@username", SqlDbType.VarChar, 20).Value = Txtname.Text;//20改成你的长度
sqlAdapter.SelectCommand.Parameters.Add("@password", SqlDbType.VarChar, 20).Value = txtpassword.Text;//20改成你的长度

DataSet ds = new DataSet();

sqlAdapter.Fill(ds, "dbuser");
}

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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