このコードを調べてデバッグするのに行き詰まりましたが、エラーは表示されません。現時点でのエラーはNo Value given for one or more required Parameters
必要な唯一の列はprodName
、文字列が空でないことを確認するために常にチェックされます。それ以外の場合は、整数値と通貨値の長さパラメーターでしょうか? 最も妥当なサイズのデータフィールドを受け入れるために、できるだけ大きくしようとしています。
また、ブール値が「null である、null ではない」カテゴリに適合しないことも心配していますが、チェックボックスがクリックされていない場合は false を返します。
これが私のパラメーターです。構文や論理エラーについて簡単に調べていただければ幸いです。私はC#の中級者です。
public int updateProducts(int prodId, string productName, string supplier, string category, string quantityPerUnit, string unitPrice, string unitsInStock, string unitsOnOrder, string reorderLevel, bool discontinued)
{
int rows = 0;
int PId = prodId;
string prodName = productName;
int supp = int.Parse(supplier);
int? categoryID = 0;
string qPerUnit = quantityPerUnit;
Decimal? uPrice = 0;
int? uInStock = 0;
int? uOnOrder = 0;
int? reorderLvl = 0;
bool disc = discontinued;
if (!string.IsNullOrWhiteSpace(unitPrice))
{
uPrice = Decimal.Parse(unitPrice);
}
if (!string.IsNullOrWhiteSpace(category))
{
categoryID = int.Parse(category);
}
if (!string.IsNullOrWhiteSpace(unitsInStock))
{
uInStock = int.Parse(unitsInStock);
}
if (!string.IsNullOrWhiteSpace(unitsOnOrder))
{
uOnOrder = int.Parse(unitsOnOrder);
}
if (!string.IsNullOrWhiteSpace(reorderLevel))
{
reorderLvl = int.Parse(reorderLevel);
}
string dbString = "UPDATE [Products] SET [ProductName]= ?,[Supplier]= ?,[Category]= ?,[QuantityPerUnit]= ?,[UnitPrice]= ?,[UnitsInStock]= ?,[UnitsOnOrder]= ?,[ReorderLevel]= ?, [Discontinued]= ? WHERE [SupplierID]= " + PId;
try
{
conn.Open();
oleCommand = new OleDbCommand(dbString, conn);
oleCommand.Parameters.Add(new OleDbParameter("@prodName", OleDbType.VarChar, 30, ParameterDirection.Input, false, 10, 0, "ProductName", DataRowVersion.Original, null)).Value = prodName;
oleCommand.Parameters.Add(new OleDbParameter("@supp", OleDbType.Integer, 40, ParameterDirection.Input, false, 10, 0, "Supplier", DataRowVersion.Original, null)).Value = supp;
oleCommand.Parameters.Add(new OleDbParameter("@cat", OleDbType.Integer, 30, ParameterDirection.Input, true, 10, 0, "Category", DataRowVersion.Original, null)).Value = categoryID.HasValue ? (object)categoryID : DBNull.Value;
oleCommand.Parameters.Add(new OleDbParameter("@qPU", OleDbType.VarChar, 20, ParameterDirection.Input, true, 10, 0, "QuantityPerUnit", DataRowVersion.Original, null)).Value = string.IsNullOrWhiteSpace(qPerUnit) ? DBNull.Value : (object)qPerUnit;
oleCommand.Parameters.Add(new OleDbParameter("@uPrice", OleDbType.Currency, 6, ParameterDirection.Input, true, 10, 0, "UnitPrice", DataRowVersion.Original, null)).Value = uPrice.HasValue ? (object)uPrice : DBNull.Value;
oleCommand.Parameters.Add(new OleDbParameter("@uInStock", OleDbType.Integer, 50, ParameterDirection.Input, true, 10, 0, "UnitsInStock", DataRowVersion.Original, null)).Value = uInStock.HasValue ? (object)uPrice : DBNull.Value;
oleCommand.Parameters.Add(new OleDbParameter("@uOnOrder", OleDbType.Integer, 50, ParameterDirection.Input, true, 10, 0, "UnitsOnOrder", DataRowVersion.Original, null)).Value = uOnOrder.HasValue ? (object)uOnOrder : DBNull.Value;
oleCommand.Parameters.Add(new OleDbParameter("@reorderLvl", OleDbType.Integer, 50, ParameterDirection.Input, true, 10, 10, "ReorderLevel", DataRowVersion.Original, null)).Value = reorderLvl.HasValue ? (object)reorderLvl : DBNull.Value;
oleCommand.Parameters.Add(new OleDbParameter("@discontinued", OleDbType.Boolean, 10, ParameterDirection.Input, true, 10, 0, "Discontinued", DataRowVersion.Original, null)).Value = disc;
rows = (int)oleCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
dbError = "Add Supplier command Error: " + ex.Message;
}
finally
{
conn.Close();
}
return rows;
}