我现在用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 失败。] 

解决方案 »

  1.   

    datarows = da.Fill(ds,"test");
    改成
    da.Fill(ds,"test");
    datarows=ds.Tables["test"].Rows.Count;
      

  2.   

    1.1中DbDataAdapter.Fill返回int型没错啊,难道2.0改成返回string了?
      

  3.   

    [FormatException: 将参数值从 String 转换到 Int32 失败。]////////我没装2.0,不过你可以强制转换一下看看
    datarows = Convert.ToInt32(da.Fill(ds,"test"));
      

  4.   

    应该是你这里的问题。。SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);
    你这里指定了参数为Int型,你确定你的username参数是int吗?
      

  5.   

    参数类型可能不对吧
    另外:
    da.Fill(ds,"test");
    datarows=ds.Tables["test"].Rows.Count;
      

  6.   

    是的,楼上说的没错,应该是
    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
      

  7.   

    string username, password;SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);parInput.Value = username;parInput和username类型都不一样
      

  8.   

    我也认为
    SqlParameter parInput = Cmd.Parameters.Add("@username", SqlDbType.Int);
    这个问题,试下换一下数据库中的列的数据类型,换成字符类别的