2013-05-03 2 views
0

ошибка указывает на cmd.ExecuteNonQuery()Не удалось преобразовать значение параметра из строки визуальной студии Int32 2008

ошибка возникает при попытке оставить поля нулевой для поля первичного ключа OEID кроме

любой предложение по пересмотру синтаксиса будет очень полезно

 Dim cmd As SqlCommand = sqlconn.CreateCommand 
     sqlconn.Open() 

     cmd.CommandType = CommandType.StoredProcedure 
     cmd.CommandText = "AddOfficeEquipmentProfile" 


     cmd.Parameters.Add("@OE_SerialNo", SqlDbType.VarChar, 35, "sgh5960").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_PropertyNo", SqlDbType.VarChar, 35, "j7h7h6g6f2").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_MacAddress", SqlDbType.VarChar, 100, "j7h7:h6g6f2").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_Static_IP", SqlDbType.VarChar, 15, "192.168.1.5").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_Vendor", SqlDbType.VarChar, 35, "ADWAYS").Value = DBNull.Value 

     cmd.Parameters.Add("@OE_PurchaseDate", SqlDbType.DateTime).Value = DBNull.Value 
     cmd.Parameters.Add("@OE_WarrantyInclusiveYear", SqlDbType.Int).Value = DBNull.Value 
     cmd.Parameters.Add("@OE_WarrantyStatus", SqlDbType.Char, 2, "IN").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_Status", SqlDbType.VarChar, 15, "Good").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_Dept_Code", SqlDbType.Char, 3, "ADM").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_Location_Code", SqlDbType.Char, 8, "ADM_OFC").Value = DBNull.Value 
     cmd.Parameters.Add("@OE_Remarks", SqlDbType.VarChar, 1000, "ACTIVE").Value = DBNull.Value 

     cmd.Parameters("@OE_SerialNo").Value = txtSerialNo.Text 
     cmd.Parameters("@OE_PropertyNo").Value = txtPropertyNo.Text 
     cmd.Parameters("@OE_MacAddress").Value = txtMacAddress.Text 
     cmd.Parameters("@OE_Static_IP").Value = txtStaticIP.Text 
     cmd.Parameters("@OE_Vendor").Value = txtVendor.Text 
     cmd.Parameters("@OE_PurchaseDate").Value = dtpPurchaseDate.Value 
     cmd.Parameters("@OE_WarrantyInclusiveYear").Value = txtWarrantyInclusiveYear.Text 
     cmd.Parameters("@OE_WarrantyStatus").Value = txtWarrantyStatus.Text 
     cmd.Parameters("@OE_Status").Value = txtStatus.Text 
     cmd.Parameters("@OE_Dept_Code").Value = cmbDeptCode.Text 
     cmd.Parameters("@OE_Location_Code").Value = cmbLocationCode.Text 
     cmd.Parameters("@OE_Remarks").Value = txtRemarks.Text 
     cmd.ExecuteNonQuery() 
     sqlconn.Close() 

ответ

0

Существует разница между Null и "".

«» является пустой строкой, и вы назначаете пустую строку в числовой столбец, вероятно WarrantyInclusiveYear

Вы должны проверить, если столбец пуст перед выполнением задания, при этом ...

If txtWarrantyInclusiveYear.Text.Trim <> "" Then 
    cmd.Parameters("@OE_WarrantyInclusiveYear").Value = txtWarrantyInclusiveYear.Text 
End If 

, но это не очень хороший код, что вы должны сделать, это ...

Dim nValue As Integer = 0 

If Integer.TryParse(txtWarrantyInclusiveYear.Text,nValue) Then 
    cmd.Parameters("@OE_WarrantyInclusiveYear").Value = nValue 
End If 
+0

даже если SerialNo и propertyNo это поле VARCHAR? – ivandinglasan

+0

Должен ли я помещать if на все целые и varchar поля? кроме символа? – ivandinglasan

+0

Извините, моя ошибка - это WarrantyInclusiveYear, это столбец Integer, а не SerialNo или PropertyNo. BTW: Если у вас нет реальной потребности в Nulls в числовых столбцах (например, для вычисления средних значений или чего-то подобного), я бы избегал этого. Установите их по умолчанию или ноль, чтобы избежать всякого рода неприятных осложнений позже. Существуют вполне обоснованные причины для Nulls в числовых столбцах, но делают это по дизайну, а не как что-то, что осталось незавершенным или как надзор. –

Смежные вопросы