当前位置:编程学习 > C#/ASP.NET >>

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

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

源错误: 


行 123:        com.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar, 20));
行 124:        com.Parameters["@pass"].Value = pass;
行 125:        if (Convert.ToInt32(com.ExecuteScalar()) > 0)
行 126:        {
行 127:            return true;


源代码是这样的:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

/// <summary>
/// operateData 的摘要说明
/// </summary>
public class operateData
{
public operateData()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
    /// <summary>
    /// 创建数据库连接
    /// </summary>
    /// <returns>返回SqlConnection对象</returns>
    public static SqlConnection createCon()
    {
       //创建数据库连接
        SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["con"]);
        return con;
    }
    /// <summary>
    /// 返回一行数据
    /// </summary>
    /// <param name="sql">SQL语句用来查询一行数据</param>
    /// <returns>返回SqlDataReader对象</returns>
    public static SqlDataReader getRow(string sql)
    {
        SqlConnection con = createCon();
        con.Open();
        SqlCommand com = new SqlCommand(sql, con);
        SqlDataReader sdr = com.ExecuteReader();
        return sdr;
    }
    /// <summary>
    /// 执行添加、删除和更新数据操作
    /// </summary>
    /// <param name="sql">SQL语句添加数据、删除数据和更新数据</param>
    /// <returns>返回一个布尔值,表示操作是否成功!</returns>
    public static bool execSql(string sql)
    {
        SqlConnection con = createCon();
        con.Open();
        SqlCommand com = new SqlCommand(sql, con);
        if (com.ExecuteNonQuery()>0)
        {
            return true;
        }else{
            return false;
        }
       
    }
    /// <summary>
    /// 返回多行数据
    /// </summary>
    /// <param name="sql">SQL语句查询出多行语句</param>
    /// <returns>返回多行数据</returns>
    public static  DataTable getRows(string sql)
    {
        DataSet ds;
        SqlConnection con = createCon();
        con.Open();
        SqlDataAdapter sda = new SqlDataAdapter(sql, con);
        ds = new DataSet();
        sda.Fill(ds);
        con.Close();
        return ds.Tables[0];
    }
    /// <summary>
    /// 查询数据是否在表中存在
    /// </summary>
    /// <param name="sql">SQL语句查询一行数据</param>
    /// <returns>返回int类型大于1表示存在</returns>
    public static int getCount(string sql)
    {
        SqlConnection con = createCon();
        con.Open();
        SqlCommand com = new SqlCommand(sql, con);
        return Convert.ToInt32(com.ExecuteScalar());
    }
    
    /// <summary>
    /// 返回某一个列的值
    /// </summary>
    /// <param name="sql">SQL语句用来查询某一列的值</param>
    /// <returns>返回列值,该值为字符串类型</returns>
    public  static  string getTier(string sql)
    {
        
        SqlConnection con = createCon();
        con.Open();
        SqlCommand com = new SqlCommand(sql, con);
        SqlDataReader sdr = com.ExecuteReader();
        sdr.Read();
        string tier=sdr[0].ToString();
        return tier;
    }
    /// <summary>
    /// 该方法用来实现登录查询
    /// </summary>
    /// <param name="sql">需要执行的SQL语句</param>
    /// <param name="name">登录名</param>
    /// <param name="pass">密码</param>
    /// <returns>返回一个布尔值,true表示登录成功false表示失败</returns>
    public static bool login(string sql, string name, string pass)
    {
        SqlConnection con = createCon();
        con.Open();
        SqlCommand com = new SqlCommand(sql, con);
        com.Parameters.Add(new SqlParameter("@name", SqlDbType.VarChar, 20));
        com.Parameters["@name"].Value = name;
        com.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar, 20));
        com.Parameters["@pass"].Value = pass;
        if (Convert.ToInt32(com.ExecuteScalar()) > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
        
    }
}


结果,密码帐号输入错误时会提醒重新输入,是正常的,但输入正确的时候就发生这个错误了。。。大概是因为第125行Convert.ToInt32(com.ExecuteScalar())的值的原因,此值可能为null,所以提示的错误,但我不知道如何解决,还是新手,求大神帮助,谢谢! C# asp.net  输入字符串的格式不正确。   字符串 格式不正确 --------------------编程问答-------------------- 简单点,你先定义个变量接收一下com.ExecuteScalar()的值,然后再转,顺便看看是否为null。
--------------------编程问答-------------------- 或者用??运算符来简化一下,比如:
object obj = com.ExecuteScalar()??"0";//0表示如果com.ExecuteScalar为null,则通过??运算符运算后,结果会为0。??这个运算符叫空运算符,你可以百度一下。
这样转就不会报你这个异常了。简单处理下。 --------------------编程问答--------------------
引用 2 楼 guwei4037 的回复:
或者用??运算符来简化一下,比如:
object obj = com.ExecuteScalar()??"0";//0表示如果com.ExecuteScalar为null,则通过??运算符运算后,结果会为0。??这个运算符叫空运算符,你可以百度一下。
这样转就不会报你这个异常了。简单处理下。


我这么改的:
 object obj = com.ExecuteScalar() ?? "0";
        if (Convert.ToInt32(obj) > 0)

但还是出现刚才的错误,我这么写对么?怎么解决? --------------------编程问答-------------------- 那就是com.ExecuteScalar()这句话报错了,你看看里面各个参数的值对不对。 --------------------编程问答--------------------
引用 4 楼 guwei4037 的回复:
那就是com.ExecuteScalar()这句话报错了,你看看里面各个参数的值对不对。

com.ExecuteScalar()这句话不是查询当前数据库当前表里第一行第一列的值么,这个值在网页里是登录名,属性我设的varchar(20),而且数据库里也把它默认为admin了,登录也没出错啊。。。怎么办
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,