Возвращаемые значения из хранимых процедур в C#

N в Array{T,N} определяет размерность массива, то есть N -мерный массив типа T.

Вы не определяете массив размера 3 для хранения координат x, y, z в своем определении struct, вместо этого вы определяете 3D-массив, который не соответствует вашей цели . [1 125]

Еще раз, вы просто объявляете тип arrayOfStructs как 10-мерный массив без конструирования его. Вы должны правильно определить и построить свой массив перед его использованием.

Типы Array в Julia не имеют статической информации о размере. Array - это динамическая структура, которая не подходит для вашего случая. Для типов массивов со статической информацией о размере вы можете взглянуть на StaticArrays.jl .

Вот как я бы поступил с вашей проблемой.

mutable struct Coords
    x::Float64
    y::Float64
    z::Float64
end

x = 10 # I want the array to be of length 10
# create an uninitialized 1D array of size `x`
arrayOfStructs = Array{Coords, 1}(undef, x) # or `Vector{Coords}(undef, x)`

# initialize the array elements using default constructor
# `Coords(x, y, z)`
for i = 1:x
    arrayOfStructs[i] = Coords(rand(), rand(), rand())
    # or you can use splatting if you already have values
    # arrayOfStructs[i] = Coords(rand(3)...)
end

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

# outer constructor that randomly initializes fields
Coords() = Coords(rand(), rand(), rand())

# initialize the array elements using new constructor
for i = 1:x
    arrayOfStructs[i] = Coords()
end

Вы также можете использовать понимание, чтобы легко построить свой массив.

arrayOfStructs = [Coords() for i in 1:x]

Если вы все еще хотите использовать Array для своего поля, вы можете определить r как одномерный массив и обработать конструкцию r в своих конструкторах.

Возможно, вы захотите взглянуть на соответствующие разделы документации по Array и Composite Types:

https://docs.julialang.org/en/v1/ manual / arrays /

https://docs.julialang.org/en/v1/manual/types/#Composite-Types-1

5
задан Brian 29 December 2008 в 19:53
поделиться

1 ответ

Существует три способа, в целом, сделать это... Можно сделать то, что Вы делаете - с Выбором - в действительности возврат одной строки, набора результатов отдельного столбца и разрешения ADO.NET вытащить значение для Вас. Или

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

можно использовать то, что называют Выходным параметром, (эффективно передача сохраненного proc ссылка на параметр, который это (proc) может заполнить со значением, которое затем будет доступно коду вызова ADO.net после возвратов proc...

у каждого есть advanteges и реклама скидки... Мне нравится первая опция лучшая причина, к которой это является самым простым и легким для кодирования... (это не является самым производительным),

пример использования выходного параметра в сохраненном proc...

  Create Procedure MyProc
  @Name varchar(20),
  @DOB DateTime,
  @EmployeeId Integer Output = Null
  As
  Set NoCount On

     If @EmployeeId Is Null 
       Begin
          Insert Employees(Name, DateofBirth)
          Values (@Name, @DOB)
          Set @EmployeeId = Scope_Identity()
       End
     Else If Exists(Select * From Employees
                    Where EmployeeId =@EmployeeId)
       Begin
           Update Employees Set
              Name = Isnull(@Name, Name),
              DateOfBirth = IsNull(@DOB, DateOfBirth)
           Where EmployeeId = @EmployeeId
       End
     Else
        Raiserror('EmployeeId %d is missing or has been deleted.',
                   16, 1, @EmployeeId)

     Return 0

Когда Вы называете сохраненный proc от ADO.NET и добавляете этот параметр к набору параметра... существует перегрузка, которая берет параметр метода, который является перечислением под названием ParameterDirection, который может принять значения ParameterDirection. InputOutput или ParameterDirection. Вывод, (среди других)

9
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: