2

パラメータ化された SQL 挿入クエリを作成しましたが、どこかで間違いを犯しました。値が切り捨てられるというメッセージが表示され続けたので、トラブルシューティング中に値を必要とするフィールド (NULL は許可されていません) のみにクエリを減らし、insert ステートメントを完了しました。

テーブルを確認すると、フォームのテキスト ボックスから取得する値ではなく、パラメータ名が挿入されていることがわかります。

明らかに、パラメーターを間違って呼び出していますが、どこが間違っているのかわかりません。皆さんが私を助けてくれることを願っています。

前もって感謝します!

注:はい、文字列で使用しているものよりも多くのパラメーターがあることはわかっていINSERTます。トラブルシューティングに使用する値を意図的に減らしました。

再度、感謝します!

try {
    string InsertString = @"INSERT INTO Item.Itemtable
        (ItemNumber, ItemDesc, RatioToOriginalItemNumber, OriginalItemNumber, EntreeCount, ItemType, ProteinBeverage)
        Values(@ItemNumberValue, '@ItemDescValue', @RatioToOriginalItemNumberValue, @OriginalItemNumberValue, @EntreeCountValue, '@ItemTypeValue', @ProteinBeverageValue)";
    SqlCommand InsertNewItem = new SqlCommand(InsertString, PmixWriter);
    //Define Insert Parameters
    SqlParameter @ItemNumberValue = InsertNewItem.Parameters.Add("@ItemNumberValue", System.Data.SqlDbType.Int);
    SqlParameter @ItemDescValue = InsertNewItem.Parameters.Add("@ItemDescValue", System.Data.SqlDbType.VarChar, 100);
    SqlParameter @ItemTypeValue = InsertNewItem.Parameters.Add("@ItemTypeValue", System.Data.SqlDbType.VarChar, 100);
    SqlParameter @ProteinBeverageValue = InsertNewItem.Parameters.Add("@ProteinBeverageValue", System.Data.SqlDbType.VarChar, 100);
    SqlParameter @IsCouponValue = InsertNewItem.Parameters.Add("@IsCouponValue", System.Data.SqlDbType.Char, 3);
    SqlParameter @EntreeCountValue = InsertNewItem.Parameters.Add("@EntreeCountValue", System.Data.SqlDbType.Real);
    SqlParameter @BevCountValue = InsertNewItem.Parameters.Add("@BevCountValue", System.Data.SqlDbType.TinyInt);
    SqlParameter @OriginalItemNumberValue = InsertNewItem.Parameters.Add("@OriginalItemNumberValue", System.Data.SqlDbType.Int);
    SqlParameter @RatioToOriginalItemNumberValue = InsertNewItem.Parameters.Add("@RatioToOriginalItemNumberValue", System.Data.SqlDbType.TinyInt);
    SqlParameter @FPBeverageCountValue = InsertNewItem.Parameters.Add("@FPBeverageCountValue", System.Data.SqlDbType.Int);
    SqlParameter @FPBeverageEntreeCountValue = InsertNewItem.Parameters.Add("@FPBeverageEntreeCountValue", System.Data.SqlDbType.Int);
    SqlParameter @FoodCostValue = InsertNewItem.Parameters.Add("@FoodCostValue", System.Data.SqlDbType.Money);

    //Assign and covert values to the stated SQL parameters.
    @ItemNumberValue.Value = Convert.ToInt32(ItemNumberBox.Text);
    @ItemDescValue.Value = ItemDescBox.Text;
    @ItemTypeValue.Value = ItemTypeBox.Text;
    @ProteinBeverageValue.Value = ProteinBevBox.Text;
    @IsCouponValue.Value = IsCouponBox.Text;
    @EntreeCountValue.Value = Convert.ToInt32(EntreeCountBox.Text);
    @BevCountValue.Value = Convert.ToInt32(BevCountBox.Text);
    @OriginalItemNumberValue.Value = Convert.ToInt32(OriginalItemNumBox.Text);
    @RatioToOriginalItemNumberValue.Value = Convert.ToInt32(RatioBox.Text);
    @FPBeverageCountValue.Value = Convert.ToInt32(FPBevBox.Text);
    @FPBeverageEntreeCountValue.Value = Convert.ToInt32(FPBevEntreeBox.Text);
    @FoodCostValue.Value = Convert.ToDecimal(0.00);

    InsertNewItem.ExecuteNonQuery();
} catch (SqlException) {
    throw;   
}
4

1 に答える 1

4

INSERTステートメントで、@ItemDescValueパラメーターと@ItemTypeValueパラメーターから一重引用符を削除します。それ以外の場合は、現在リテラル値として挿入されています。

于 2012-09-30T01:47:40.903 に答える