0

私はこの問題を抱えています

入力文字列は、正しい形式ではありませんでした。

次の部分が強調表示されます。

DisplayOrder(Convert.ToInt16(txtOrderNo.Text)); DisplayOrderDetails(Convert.ToInt16(txtOrderNo.Text));

何がエラーなのか分からず困っています、教えていただけませんか?どうもありがとうございました。

これが私のセットコードです:

private void displayNavigate()
{
    DisplayOrder(Convert.ToInt16(txtOrderNo.Text));
    DisplayOrderDetails(Convert.ToInt16(txtOrderNo.Text));

    double dTotal = 0;

    try
    {
        for (int nRow = 0; nRow <= grdDetails.Rows.Count - 1; nRow++)
        {
            dTotal = dTotal + Convert.ToDouble((grdDetails.Rows[nRow].Cells["Amount"].Value.ToString()));
        }
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    lblTotal.Text = string.Format("{0:#,##00.00}", dTotal);
}

//================================================================================
//================================================================================


private void DisplayOrder(int nOrderNo)
{
    try
    {
        OpenConnection();

        SqlCommand cmdSelect = new SqlCommand();

        cmdSelect.Connection = cn;
        cmdSelect.CommandType = CommandType.Text;
        cmdSelect.Transaction = trnOrder;
        cmdSelect.CommandText = "SELECT " +
            "B.OrderNo, B.OrderDate, A.CustomerNo, " +
            "A.CustomerName, A.CustomerAddress, B.PurchaseOrderNo, B.AgentName, B.Status " +
            "FROM Customers AS A, Orders AS B " +
            "WHERE A.CustomerNo = B.CustomerNo " +
            "AND B.OrderNo ='" + nOrderNo + "'";

        SqlDataReader dr = cmdSelect.ExecuteReader(CommandBehavior.CloseConnection);

        while (dr.Read())
        {
            txtOrderNo.Text = dr["OrderNo"].ToString();
            dtpOrderDate.Value = Convert.ToDateTime(dr["OrderDate"].ToString());
            txtCustomerNo.Text = dr["CustomerNo"].ToString();
            txtCustomerName.Text = dr["CustomerName"].ToString();
            txtCustomerAddress.Text = dr["CustomerAddress"].ToString();
            txtPONo.Text = dr["PurchaseOrderNo"].ToString();
            cboAgentName.Text = dr["AgentName"].ToString();
            txtOrderStatus.Text = dr["Status"].ToString();
        }
        dr.Close();
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

//================================================================================
//================================================================================

private void DisplayOrderDetails(int nOrderNo)
{
    OpenConnection();

    SqlCommand cmdSelect = new SqlCommand();
    cmdSelect.Connection = cn;
    cmdSelect.CommandType = CommandType.Text;
    cmdSelect.Transaction = trnOrder;
    cmdSelect.CommandText =
        "SELECT PackagingOutside, Quantity, Unit, ProductNo, ProductName, ProductSize, PackagingInside, " +
        "SellingDiscount, SellingPrice, Amount FROM OrderDetails WHERE OrderNo = '"
        + nOrderNo + "'";

    SqlDataAdapter daDetail = new SqlDataAdapter();
    daDetail.SelectCommand = cmdSelect;

    DataSet ds = new DataSet();
    daDetail.Fill(ds, "OrderDetails");

    grdDetails.DataSource = null;
    grdDetails.DataSource = ds.Tables["OrderDetails"];
}
4

3 に答える 3

1

使用すると、値が一連の数字 (0 から 9) に続くオプションの記号で構成されていないConvert.ToInt16場合、この例外が発生します。

以下のように続行する前に、入力の検証を行います。

int orderNo;
if (int.TryParse(txtOrderNo.Text, out orderNo))
{
    DisplayOrder(orderNo);
    DisplayOrderDetails(orderNo);
}

サイドノート :

SqlConnection必要なときに create new インスタントを共有せず、以下のように using ブロックでラップします

using (SqlConnection con = new SqlConnection(connectionString))
{

}

SQL パラメータを使用する

cmdSelect.CommandText = "SELECT * FROM Orders WHERE OrderNo = @OrderNo";
cmdSelect.Parameters.AddWithValue("@OrderNo", nOrderNo);
于 2013-09-17T06:04:40.403 に答える
0

考慮すべき点が 2 つあります。

  1. テキスト ボックスに入力する値は 16 ビットの範囲の整数である必要があります。それよりも大きな値を指定できる場合は、long、int32 などを検討する必要があります。

  2. which を使用してテキストボックスを検証すると、TryParse()有効な値が入力されているかどうかがわかります。

于 2013-09-17T06:09:04.923 に答える
0

これは、txtOrderNo.Text の値が整数と見なされないことを意味します。テキストボックスが空の場合、このエラーが発生します。

テキスト ボックスにデータが含まれていることを確認するか、TryParse ( http://msdn.microsoft.com/en-us/library/f02979c7.aspx ) メソッドを使用します。

于 2013-09-17T06:05:15.337 に答える