C# 格式异常

本文关键字:异常 格式 | 更新日期: 2023-09-27 18:37:22

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

该表如下所示:

[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>

它抛给我的错误是:

mscorlib 中发生了类型为"System.FormatException"的异常.dll但未在用户代码中处理

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

有人可以指出我这个错误来自哪里吗?

C# 格式异常

你可能

不得不

 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

使用 int.TryParse(string, out int) 切换string.IsNullOrEmtpy(),如果解析了值,则返回 true。(或者只是坚持字符串。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;
    }

使用 TryParse 而不是此行。如果文本框中的文本不是数字,您将获得FormatException

Convert.ToInt32(TextBox1.Text)

您为文本框设置了错误的检查。您正在检查是否 文本框 1 的值为 NULL 或 Empty,而不是将其转换为 int32,那么如何 空值或空值可以转换为 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";                            
}