Параметр хранимой процедуры DbNull.Value? - PullRequest
0 голосов
/ 18 ноября 2008

У меня есть веб-сервис, который имеет универсальную функцию, которая возвращает набор данных из результатов хранимых процедур ... Некоторые хранимые процедуры имеют необязательные параметры, в которых значение может быть нулевым, но не всегда.

Во всяком случае, я пытаюсь передать параметр, который имеет значение DBNull.Value

и я получаю это Произошла ошибка при создании XML-документа. при выполнении операции обратно из веб-службы

Если я пропущу этот параметр, он будет работать нормально ... но очень хотелось бы знать, почему DBNull.Value вызывает эту проблему.

Ответы [ 2 ]

1 голос
/ 18 ноября 2008

Я полагаю, это потому, что значение System.DBNull является нулевым в таблице базы данных, но нулевое поле в процедуре фактически приравнивается к ключевому слову null / nothing. Не пустое значение базы данных. Я не уверен в технических различиях под капотом.

Но в вашем сохраненном процессе вы можете просто установить его по умолчанию в null и не отправлять значение, как вы уже сделали, или я верю, что если вы отправили null / ничто, это также сработает.

0 голосов
/ 22 сентября 2011

Вы можете передать значение NULL в SqlParemeter, но вы должны выполнить некоторое преобразование типов, чтобы убедиться, что правильное значение NULL передано.

В этом примере есть параметр "Count", который является целым числом и передается как ноль:

Using dtResult as New DataTable 
  Using cn as SqlConnection = New SqlConnection ("ConnectionString") 
    Using sqlcmd as SqlCommand - New SqlCommand("StoredProceName", cn) with {.CommandType=CommandType.StoredProcedure}

      Dim sp As SqlParameter
      sp = sqlcmd.Parameters.Add("@Count", SqlDbType.Int)
      sp.value = CType(Nothing, SqlTypes.SqlInt32) 

      Using myDR as SqlDataReader = sqlcmd.ExecuteReader
        dtResult.Load(myDR)
      end using 
      return dtResult 
    End Using ' For sqlcmd 
    cn.Close() ' Close the connection 
  end using ' For cn 
end using ' For dtResult
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...