2013-04-29 4 views
1

다음 매개 변수를 기반으로 레코드를 데이터베이스에 삽입하는 다음 SQL 쿼리가 있습니다. 그것은 잘 작동하지만 null 값을 허용하지 않으므로 Null이 있으면 오류를 리턴합니다.매개 변수화 된 SQL 쿼리에서 Null 값을 허용 하시겠습니까?

테이블이 Null을 허용하도록 설정되었습니다.

SqlConnection dbconnection = new SqlConnection(@"Data Source=LEWIS;Initial Catalog=CustomPC;Integrated Security=True"); 


SqlCommand InsertPC = new SqlCommand("INSERT INTO [Custom_PC] ([CPU_ID], [Motherboard_ID],[Graphics_Card_ID],[PSU_ID],[RAM_ID],[Case_ID],[Primary_Storage_Drive_ID],[Secondary_Storage_Drive_ID],[Primary_Optical_Drive_ID],[Secondary_Optical_Drive_ID]) VALUES (@CPU_ID, @Motherboard_ID, @Graphics_Card_ID, @PSU_ID, @RAM_ID, @Case_ID, @Primary_Storage_Drive_ID, @Secondary_Storage_Drive_ID, @Primary_Optical_Drive_ID, @Secondary_Optical_Drive_ID) SET @ReturnedID = Scope_Identity();", dbconnection); 

SqlParameter CPU_IDParam = InsertPC.Parameters.Add("@CPU_ID", SqlDbType.Int); 
CPU_IDParam.Value = Session["DATA"]; 

SqlParameter Motherboard_IDParam = InsertPC.Parameters.Add("@Motherboard_ID", SqlDbType.Int); 
Motherboard_IDParam.Value = Session["MotherboardID"]; 

SqlParameter Graphics_Card_IDParam = InsertPC.Parameters.Add("@Graphics_Card_ID", SqlDbType.Int); 
Graphics_Card_IDParam.Value = Session["GraphicsID"]; 

SqlParameter PSU_IDParam = InsertPC.Parameters.Add("@PSU_ID", SqlDbType.Int); 
PSU_IDParam.Value = Session["PSUID"]; 

SqlParameter RAM_IDParam = InsertPC.Parameters.Add("@RAM_ID", SqlDbType.Int); 
RAM_IDParam.Value = Session["RAMID"]; 

SqlParameter Case_IDParam = InsertPC.Parameters.Add("@Case_ID", SqlDbType.Int); 
Case_IDParam.Value = Session["CaseID"]; 

SqlParameter Primary_Storage_Drive_IDParam = InsertPC.Parameters.Add("@Primary_Storage_Drive_ID", SqlDbType.Int); 
Primary_Storage_Drive_IDParam.Value = Session["HDD1ID"]; 

SqlParameter Secondary_Storage_Drive_IDParam = InsertPC.Parameters.Add("@Secondary_Storage_Drive_ID", SqlDbType.Int); 
Secondary_Storage_Drive_IDParam.Value = Session["HDD2ID"]; 

SqlParameter Primary_Optical_Drive_IDParam = InsertPC.Parameters.Add("@Primary_Optical_Drive_ID", SqlDbType.Int); 
Primary_Optical_Drive_IDParam.Value = Session["OpticalDrive1ID"]; 

SqlParameter Secondary_Optical_Drive_IDParam = InsertPC.Parameters.Add("@Secondary_Optical_Drive_ID", SqlDbType.Int); 
Secondary_Optical_Drive_IDParam.Value = Session["OpticalDrive2ID"]; 

SqlParameter ReturnedIDParam = InsertPC.Parameters.Add("@ReturnedID", SqlDbType.Int); 
ReturnedIDParam.Direction = ParameterDirection.Output; 


dbconnection.Open(); 

InsertPC.ExecuteNonQuery(); 

Session["PCNum"] = (ReturnedIDParam.Value); 

Response.Redirect("~/CustomPC_Details.aspx"); 
+0

무엇이 오류입니까? – Oded

+0

그건 그렇고, 당신이 상상하지 않아요 - 여기에 표준 행동은 내 바보 같아요 : http://stackoverflow.com/a/9632050/23354 –

답변

6

당신은 객체가 null 여부를 확인하고 DBNull.Value에 매개 변수를 설정해야합니다. 이 때문에 ?? 운영자 가능한 두 값 object에 캐스트 할 필요가

SqlParameter Secondary_Optical_Drive_IDParam = InsertPC.Parameters.Add("@Secondary_Optical_Drive_ID", SqlDbType.Int); 
Secondary_Optical_Drive_IDParam.Value = (object)Session["OpticalDrive2ID"] ?? (object)DBNull.Value; 

주 같은 유형이 있어야합니다.

+0

대단히 고마워요, 대단히 고마워요. – user2212460

관련 문제