我創建了一個參數化的SQL插入查詢,並且我在某處犯了一個錯誤。我不斷收到一條消息,說明值將被截斷,因此,在排除故障的過程中,我將查詢減少爲只有需要值的字段(NULL不允許),並且插入語句已完成。爲C#中的INSERT語句定義SQL參數
我檢查了表格,發現插入了參數名稱,而不是他們應該從窗體的文本框拉取的值。
顯然我打電話給我的參數不正確,但我無法弄清楚我出錯的地方。我希望你們都能幫助我。
在此先感謝!
注意:是的,我知道有比我在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;
}
沒有表定義,這個問題是不應答的。截斷可能表明你正試圖存儲字符串比db中的字段長。例如,在「nvarchar(1)」中存儲「db」會給你這個警告。 – spender
您確定在'VarChar'參數中傳遞的值不超過聲明的長度100嗎?它們是否與表中的列定義匹配? – HABO