高手赶快来帮忙解决,想不通为什么会这样,

splory 2006-05-11 09:57:37
我现在用vs.net2005 编写的如下程序,和出错的提示
为什么,高手解决

string username, password;
int datarows;
username = txtUser.Text;
password = txtPass.Text;
PublicCls pc = new PublicCls();
SqlConnection conn=new SqlConnection(pc.strConn);
string SQL = "select * from T_User where F_UserName=@username";
SqlCommand Cmd = new SqlCommand(SQL, conn);
SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);
parInput.Direction = ParameterDirection.Input;
parInput.Value = username;
SqlDataAdapter da = new SqlDataAdapter();
conn.Open();
da.SelectCommand = Cmd;
DataSet ds = new DataSet();
datarows = da.Fill(ds,"test");
conn.Close();

错误提示:
输入字符串的格式不正确。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.FormatException: 输入字符串的格式不正确。

源错误:


行 33: da.SelectCommand = Cmd;
行 34: DataSet ds = new DataSet();
行 35: datarows = da.Fill(ds,"test");
行 36: conn.Close();
行 37: if (datarows == 0)


源文件: c:\Documents and Settings\cqfmp\My Documents\Visual Studio 2005\WebSites\PS\Login.aspx.cs 行: 35

堆栈跟踪:


[FormatException: 输入字符串的格式不正确。]
System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +2752819
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +102
System.String.System.IConvertible.ToInt32(IFormatProvider provider) +43
System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +214
System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType) +738

[FormatException: 将参数值从 String 转换到 Int32 失败。]


...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
splory 2006-05-12
  • 打赏
  • 举报
回复
ok,解决,议会结贴
我怎么这么粗心阿
还以为这是2005版本的改动呢
m2jawer 2006-05-11
  • 打赏
  • 举报
回复
我也认为
SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);
这个问题,试下换一下数据库中的列的数据类型,换成字符类别的
AlphaGroup 2006-05-11
  • 打赏
  • 举报
回复
string username, password;

SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);

parInput.Value = username;

parInput和username类型都不一样
sky 2006-05-11
  • 打赏
  • 举报
回复
是的,楼上说的没错,应该是
SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);
这句的问题。

在2.0中,fill的原型是
public int Fill (
DataSet dataSet,
string srcTable
)
这与1.0,1.1都是一样的。

参数
dataSet
要用记录和架构(如果必要)填充的 DataSet。

srcTable
用于表映射的源表的名称。

返回值
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

具体参见MSDN:
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref4/html/M_System_Data_Common_DbDataAdapter_Fill_2_87c80171.htm
Yellow198267 2006-05-11
  • 打赏
  • 举报
回复
参数类型可能不对吧
另外:
da.Fill(ds,"test");
datarows=ds.Tables["test"].Rows.Count;
cnhgj 2006-05-11
  • 打赏
  • 举报
回复
应该是你这里的问题。。

SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);
你这里指定了参数为Int型,你确定你的username参数是int吗?
cnhgj 2006-05-11
  • 打赏
  • 举报
回复
[FormatException: 将参数值从 String 转换到 Int32 失败。]

////////

我没装2.0,不过你可以强制转换一下看看
datarows = Convert.ToInt32(da.Fill(ds,"test"));
cnhgj 2006-05-11
  • 打赏
  • 举报
回复
1.1中DbDataAdapter.Fill返回int型没错啊,难道2.0改成返回string了?
Eallies 2006-05-11
  • 打赏
  • 举报
回复
楼上的厉害
singlepine 2006-05-11
  • 打赏
  • 举报
回复
datarows = da.Fill(ds,"test");
改成
da.Fill(ds,"test");
datarows=ds.Tables["test"].Rows.Count;

111,120

社区成员

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

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

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