2012-09-30 2 views
2

매개 변수화 된 SQL 삽입 쿼리를 만들었으므로 어딘가에서 실수를 범했습니다. 값이 잘 리게된다는 메시지가 계속해서 나왔기 때문에 문제 해결 중에 필요한 값 (NULL은 허용되지 않음) 만 쿼리를 축소하고 삽입 문을 완료했습니다.C#의 INSERT 문에 대한 SQL 매개 변수 정의

테이블을 확인하고 양식의 텍스트 상자에서 가져와야하는 값이 아니라 매개 변수 이름이 삽입 된 것을 확인합니다.

분명히 내 매개 변수를 잘못 호출하고 있지만 잘못된 위치를 파악할 수 없습니다. 나는 너희 모두가 나를 도울 수 있기를 바라고있다.

미리 감사드립니다.

참고 : 예, 나는 내가 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; 
} 
+0

테이블 정의가 없으면이 질문에 답할 수 없습니다. 자르기는 아마도 db보다 필드 길이보다 긴 문자열을 저장하려고한다는 것을 나타냅니다. 예를 들어 "db"를'nvarchar (1) '에 저장하면이 경고가 나타납니다. – spender

+0

'VarChar' 매개 변수에 전달 된 값이 선언 된 길이 인 100을 초과하지 않았습니까? 표의 열 정의와 일치합니까? – HABO

답변

4

, @ItemDescValue 및 @ItemTypeValue 매개 변수에서 따옴표를 제거합니다. 그들은 현재 리터럴 값으로 삽입되고 있습니다.

+0

좋은 캐치 ..... – LarsTech

+0

확실히 squinting의 양을 취했다, that 's 확실한! – Traxxus

+0

또한 이러한 종류의 상황이 인라인 쿼리가 일반적으로 싫어하는 이유 중 하나라고 덧붙여 야합니다. 코드 용 문자열 대신 SQL 용 IDE를 사용하면이 문제를 쉽게 해결할 수 있습니다. – Traxxus