Передача значения параметра (иногда получить нулевое значение) в хранимую процедуру
я хочу передать значение параметра иногда получить нулевое значение в хранимую процедуру,мой хранимый procuder выглядит следующим образом
USE [Stock] GO ALTER Proc [dbo].[Add_ItemQte] @ID_Item int, @ID_Supplier int, @Qantity_ItemQte int, @Date_ItemQte date, @Lenght_ItemQte int, @Widht_ItemQte int, @WightT_ItemQte float, @ID_Location int, @ID_Project int=null AS INSERT INTO ItemQuantity ([ID_Item] ,[ID_Supplier] ,[Qantity_ItemQte] ,[Date_ItemQte] ,[Lenght_ItemQte] ,[Widht_ItemQte] ,[WightT_ItemQte] ,[ID_Location] ,[ID_Project]) VALUES (@ID_Item ,@ID_Supplier ,@Qantity_ItemQte ,@Date_ItemQte ,@Lenght_ItemQte ,@Widht_ItemQte ,@WightT_ItemQte ,@ID_Location ,@ID_Project)
мой код c# выглядит примерно так
public void Add_ItemQte(int Name, int Supplier, int Qantity, DateTime Date, int Lenght,int Widht,double WightT,int Location, Nullable<int> Project) { DAL.DataAccessLayer DAL = new DAL.DataAccessLayer(); DAL.Open(); SqlParameter[] param = new SqlParameter[9]; param[0] = new SqlParameter("@ID_Item", SqlDbType.Int); param[0].Value = Name; param[1] = new SqlParameter("@ID_Supplier", SqlDbType.Int); param[1].Value = Supplier; param[2] = new SqlParameter("@Qantity_ItemQte", SqlDbType.Int); param[2].Value = Qantity; param[3] = new SqlParameter("@Date_ItemQte", SqlDbType.Date); param[3].Value = Date; param[4] = new SqlParameter("@Lenght_ItemQte", SqlDbType.Int); param[4].Value = Lenght; param[5] = new SqlParameter("@Widht_ItemQte", SqlDbType.Int); param[5].Value = Widht; param[6] = new SqlParameter("@WightT_ItemQte", SqlDbType.Float); param[6].Value = WightT; param[7] = new SqlParameter("@ID_Location", SqlDbType.Int); param[7].Value = Location; param[8] = new SqlParameter("@ID_Project", SqlDbType.Int); param[8].Value = Project; DAL.ExcuteCommande("Add_ItemQte", param); DAL.Close(); }
и я использую этот код для сохранения своих данных
for (int i=0;i<gridView1.RowCount;i++) { prd.Add_ItemQte(Convert.ToInt32(gridView1.GetRowCellValue(i, "IDNom")), Convert.ToInt32(gridView1.GetRowCellValue(i, "IDFournisseur")), Convert.ToInt32(gridView1.GetRowCellValue(i, "Quantité")), Convert.ToDateTime(gridView1.GetRowCellValue(i, "Date")), Convert.ToInt32(gridView1.GetRowCellValue(i, "Longueur")), Convert.ToInt32(gridView1.GetRowCellValue(i, "Largeur")), Convert.ToDouble(gridView1.GetRowCellValue(i, "Poids Total")), Convert.ToInt32(gridView1.GetRowCellValue(i, "IDLocalisation")), Convert.ToInt32(gridView1.GetRowCellValue(i, "IDProjet"))); }
когда столбец IDProjet имеет значение, код запускается без ошибок, но когда он не содержит никакого значения, я получаю эту ошибку:объект не может быть приведен из DBNull в другие типы.Я не хочу сохранять 0, если значение равно null,потому что я сделаю некоторую фильтрацию в зависимости от этого столбца, как я могу решить эту проблему, заранее спасибо.
Что я уже пробовал:
я пытаюсь использовать Nullable<int>, Но у меня это не работает
GKP1992
Попробуйте привести проект к объектному типу и перед назначением значения param.
А еще лучше, попробуйте вот это
param[8].Value = (object)(Project ?? DBNull.Value);
Mahfoud Bouabdallah
Я попытался, но получил ту же ошибку:объект не может быть приведен из DBNull в другие типы