首页 > 解决方案 > 为什么“输入字符串的格式不正确。” 在 mySQL 的查询中?

问题描述

在以下代码中,我收到“输入字符串格式不正确”的运行时错误。在 oCommand.ExecuteReader() 之后。

                    oCommand.CommandText = "CheckOutItem";
                    oCommand.CommandType = System.Data.CommandType.StoredProcedure;

                    oCommand.Parameters.AddWithValue("@OrderID", OrderID);
                    oCommand.Parameters.AddWithValue("@GivenLargeSizeName", Enum.GetName(typeof(Size), Size.REGULAR));
                    oCommand.Parameters.AddWithValue("@GivenSmallSizeName", Enum.GetName(typeof(Size), Size.SMALL));
                    oCommand.Parameters.AddWithValue("@Latitude",oOrder.OrderTimeLocation.Location.latitude);
                    oCommand.Parameters.AddWithValue("@Longitude",oOrder.OrderTimeLocation.Location.longitude);

                    oCommand.Parameters.AddWithValue("@ListingID", MySqlDbType.Int64);
                    oCommand.Parameters.AddWithValue("@Quantity", MySqlDbType.Int16);
                    oCommand.Parameters.AddWithValue("@Size", MySqlDbType.VarChar);
                    oCommand.Parameters.AddWithValue("@DeliveryMethod", MySqlDbType.VarChar);
                foreach (var OrderItem in oOrder.OrderItems)
                {
                    oCommand.Parameters["@ListingID"].Value = OrderItem.ListingID;
                    oCommand.Parameters["@Quantity"].Value = OrderItem.Quantity;
                    oCommand.Parameters["@Size"].Value = Enum.GetName(typeof(Size), OrderItem.Size);
                    oCommand.Parameters["@DeliveryMethod"].Value = Enum.GetName(typeof(DeliverMethod), OrderItem.DeliveryPickupMethod);

                    using (var reader = oCommand.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Int64 OrderItemID = Convert.ToInt64(reader["@ORDER_ITEM_ID"]);
                            Int64 OrderItemStatusID = Convert.ToInt64(reader["@ORDER_ITEM_STATUS_ID"]);
                            Int64 OrderItemPriceID = Convert.ToInt64(reader["@ORDER_ITEM_PRICE_ID"]);
                            TotalOrderCostFromDB = TotalOrderCostFromDB + Convert.ToDecimal(reader["@TOTAL_ORDER_COST"]);
                        }
                    }
                }

如果我使用像这样的语句

oCommand.Parameters.AddWithValue("@ListingID",OrderItem.ListingID) 

工作正常,但我不能循环。

我分配的所有值在调试中都是正确的,并且没有空值或奇怪的东西进入 .Value。

由于我在 AddWithValue 方法中得到了正确答案,我认为我对 StoredPoocedure 没有任何问题。

为此目的是否有更好的循环方法?

经过一些调试,我能够将问题缩小到最后两行

oCommand.Parameters.AddWithValue("@Size", MySqlDbType.VarChar);
                    oCommand.Parameters.AddWithValue("@DeliveryMethod", MySqlDbType.VarChar);

如果我用一个虚拟字符串初始化它,一切都很好。但是使用 VarChar 或 String 进行初始化会导致问题。据我了解,以下返回一个字符串对吗?

Enum.GetName(typeof(Size), OrderItem.Size)

标签: mysqlasp.net

解决方案


推荐阅读