2012-09-30 21 views
2

我創建了一個參數化的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; 
} 
+0

沒有表定義,這個問題是不應答的。截斷可能表明你正試圖存儲字符串比db中的字段長。例如,在「nvarchar(1)」中存儲「db」會給你這個警告。 – spender

+0

您確定在'VarChar'參數中傳遞的值不超過聲明的長度100嗎?它們是否與表中的列定義匹配? – HABO

回答

4

在您的INSERT語句中,從@ItemDescValue和@ItemTypeValue參數中刪除單引號。它們目前被插入爲字面值,否則。

+0

很好的接受..... – LarsTech

+0

做了一個體面的眯眼,這是肯定的! – Traxxus

+0

我還應該補充說,這種情況是內聯查詢通常不被接受的原因之一。用於SQL的IDE(而不是代碼中的字符串)本來可以很容易地解決。 – Traxxus