2014-09-16 4 views
0

Я создал хранимую процедуру для вставки значений в таблицу. Это хранимая процедура:Ошибка при передаче параметров хранимой процедуре

CREATE PROCEDURE [dbo].[insertproc] 
    @CollectionPersonName varchar(50), 
    @Address varchar(1500), 
    @ContactNo varchar(50), 
    @CreatedBy int, 
    @CreatedOn datetime 
AS 
BEGIN 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    insert into CollectionPersonDetails(CollectionPersonName, Address, ContactNo, CreatedBy, CreatedOn) 
    values(@CollectionPersonName, @Address, @ContactNo, @CreatedBy, @CreatedOn); 
END 

Ниже функция, которую я написал для передачи параметров и выполнения запроса в хранимой процедуре:

public static int SaveDataProcedure(tblCollectionPersonObj oSaveObj, int iUserId) 
{ 
     string query = "insertproc"; 

     OdbcConnection conn = new OdbcConnection(Connect.ConnectionString()); 

     OdbcCommand cmd = new OdbcCommand("insertproc",conn); 
     cmd.CommandText = query; 
     cmd.CommandType = CommandType.StoredProcedure;    

     cmd.Parameters.AddWithValue("@CollectionPersonName", oSaveObj.SCollectionPersonName);    
     cmd.Parameters.AddWithValue("@Address", oSaveObj.SAddress);   
     cmd.Parameters.AddWithValue("@ContactNo", oSaveObj.SPhoneNo);    
     cmd.Parameters.AddWithValue("@CreatedBy", iUserId);   
     cmd.Parameters.AddWithValue("@CreatedOn", CommonData.GetDateForDatabase(DateTime.Now));    

     cmd.Connection.Open(); 

     int i= cmd.ExecuteNonQuery(); 

     cmd.Connection.Close(); 
     return i; 
    } 

Я получаю ошибку, которая говорит, что хранимая процедура ожидает параметр @collectionPersonName, который не был поставлен. Я также попытался использовать функцию parameters.add, но была показана та же ошибка.

Я могу видеть значения, возникающие, когда я отлаживаю код, но когда выполнение приходит к ExecuteNonQuery(), это тот момент, когда я получаю ошибку. Ошибка может быть очень глупой, но я не смог ее найти.

Просьба помочь.

+0

Что такое значение 'oSaveObj.SCollectionPersonName' при отладке его? –

+0

@ SonerGönül, значение oSaveObj.SCollectionPersonName подходит как ожидалось. Нет проблем с этим. – TVicky

+0

Вы должны проверить [Может ли мы перестать использовать AddWithValue() уже?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) и перестать использовать '.AddWithValue()' - это может привести к неожиданным и неожиданным результатам ... –

ответ

0

AddWithValue метод не будет добавлять параметр, если значение равно null.

Проверьте oSaveObj.SCollectionPersonName является недействительным и использовать DBNull.Value в этом случае

cmd.Parameters.AddWithValue("@CollectionPersonName", oSaveObj.SCollectionPersonNamу ?? DBNull.Value); 
+0

Я отлаживал эту часть кода, и я обнаружил, что oSaveObj.SCollectionPersonName имеет значение, оно не было нулевым. – TVicky

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