C#格式异常

C# Format exception

我有 2 tables ConturiPersoana 我想显示 Cont 拥有的每一个项目(我不能使用 ListView)这样做我 运行 遇到了一个小问题。

table 看起来像这样:

[Cont]:
        - id (cheie primara)
        - id_persoana (cheie externa in [Persoana])
        - Banca (sir de caractere maxim 64)
        - Sold (decimal)
        - Unitate (moneda, sir de caracatere de lungime 3)
        - Data_deschiderii (data)

我无法弄清楚我的格式异常在哪里这是代码:

namespace TarnaLucianFlorinGrupa333
{
    public partial class Conturi : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string query = GetQuery();
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand(query, conn);
            SqlDataReader reader = cmd.ExecuteReader();
            FillTable(reader);
            conn.Close();
        }


        private string GetQuery()
        {
            string query = string.Empty;
            if (string.IsNullOrEmpty(TextBox1.Text))
            {
                query = string.Format("select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where c.Sold>={0} and p.Id = c.id_persoana", Convert.ToInt32(TextBox1.Text));
            }

            else
            {
                query = "select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where p.Id = c.id_persoana";
            }

            return query;
        }

        private void FillTable(SqlDataReader reader)
        {
            TableRow th = Table1.Rows[0];
            Table1.Rows.Clear();
            Table1.Rows.Add(th);

            while (reader.Read())
            {
                TableRow row = new TableRow();

                TableCell nume = new TableCell();
                nume.Text = reader.GetValue(1).ToString();
                row.Cells.Add(nume);

                TableCell Banca = new TableCell();
                Banca.Text = reader.GetValue(2).ToString();
                row.Cells.Add(Banca);

                TableCell Sold = new TableCell();
                Sold.Text = reader.GetValue(3).ToString();
                row.Cells.Add(Sold);

                TableCell Unitate = new TableCell();
                Unitate.Text = reader.GetValue(4).ToString();
                row.Cells.Add(Unitate);

                TableCell Data_Deschiderii = new TableCell();
                Data_Deschiderii.Text = reader.GetValue(5).ToString();
                row.Cells.Add(Data_Deschiderii);

                TableCell Adauga = new TableCell();
                Adauga.Text = string.Format("<a href=\"Adauga.aspx?id={0}\"> Adauga </a>", reader.GetValue(0).ToString());
                row.Cells.Add(Adauga);

                Table1.Rows.Add(row);
            }
        }
        protected void Button2_Click(object sender, EventArgs e) { }


    }
}

这是视图:

   <table>

    <tr>
        <td> Soldul </td>
        <td> 
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </td>
        <td> 
            &nbsp;</td>
    </tr>
    <tr>

          <td>

              <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Cauta" />

          </td>
    </tr>
    <tr>
        <td colspan="3">
            <asp:Table ID="Table1" runat="server">
                <asp:TableHeaderRow BackColor=Aqua>
                    <asp:TableHeaderCell> nume </asp:TableHeaderCell> 
                    <asp:TableHeaderCell> Banca </asp:TableHeaderCell> 
                    <asp:TableHeaderCell> Sold </asp:TableHeaderCell> 
                    <asp:TableHeaderCell> Unitate </asp:TableHeaderCell>
                    <asp:TableHeaderCell> Data_Deschidere</asp:TableHeaderCell>
                    <asp:TableHeaderCell> Adauga</asp:TableHeaderCell>  
                </asp:TableHeaderRow>
            </asp:Table>
        </td>


    </tr>

 </table>

它抛出的错误是:

An exception of type 'System.FormatException' occurred in mscorlib.dll but was not handled in user code

Additional information: Input string was not in a correct format.

谁能告诉我这个错误是从哪里来的?

使用 TryParse 代替这一行。如果文本框中的文本不是数字,您将得到 FormatException.

Convert.ToInt32(TextBox1.Text)

You have placed wrong check for textbox. You are checking that if value of TextBox1 is NULL or Empty than convert it to int32 so how a null or empty value can be converted to int32.

还要确保在此文本框中写入的是整数值。改成这样

if (!string.IsNullOrEmpty(TextBox1.Text))
{
query = string.Format("select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where c.Sold>={0} and p.Id = c.id_persoana", Convert.ToInt32(TextBox1.Text));

}
else
 {
query = "select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where p.Id = c.id_persoana";                            
}

可能你必须

 if (!string.IsNullOrEmpty(TextBox1.Text))
            {
                query = string.Format("select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where c.Sold>={0} and p.Id = c.id_persoana", Convert.ToInt32(TextBox1.Text));
            }

你似乎试图在文本框为空时转换为 int

string.IsNullOrEmtpy() 切换为 int.TryParse(string, out int),如果值已解析,则 returns 为真。 (或者如果你不 want/need 解析就坚持使用 string.IsNullOrEmpty())

    private string GetQuery()
    {
        string query = string.Empty;
        int value = -1;
        if (int.TryParse(TextBox1.Text, out value))
        {
            query = string.Format("select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where c.Sold>={0} and p.Id = c.id_persoana", value);
        }

        else
        {
            query = "select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where p.Id = c.id_persoana";
        }

        return query;
    }

附带说明一下,您应该研究参数化查询,而不是使用 string.Format() 甚至手动字符串连接。

参数化版本:

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
        SqlCommand cmd = GetQuery();
        cmd.Connection = conn;
        cmd.Connection.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        FillTable(reader);
        cmd.Connection.Close();
    }

    private SqlCommand GetQuery()
    {
        SqlCommand cmd = new SqlCommand();

        int value = -1;
        if (int.TryParse(TextBox1.Text, out value))
        {
            cmd.CommandText = "select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where c.Sold>=@Sold and p.Id = c.id_persoana";
            cmd.Parameters.Add(new SqlParameter("@Sold", value));
        }

        else
        {
            cmd.CommandText = "select c.id,p.Nume, c.Banca,c.Sold,c.Unitate,c.Data_Deschiderii from Cont c,Persoana p where p.Id = c.id_persoana";
        }

        return cmd;
    }