2011-03-13 3 views
2
public static long callproc() 
{ 
    DbCommand command = db.GetStoredProcCommand("dbo.proc"); 
    db.AddOutParameter(command, "@proc_id", DbType.Int64, 8); 
    db.ExecuteNonQuery(command); 
    return long.Parse(db.GetParameterValue(command, "@proc_id").ToString()); 
} 

Это лучший способ использовать параметр?параметры обработки

ответ

2

Функция GetParameterValue() не является частью платформы .NET, поэтому я не уверен, что она делает.

В любом случае, похоже, что вы конвертируете SqlInt64 в string, а затем в long. Это будет работать, но это долгий путь. Существует неявное преобразование между SqlInt64 и long. Попробуйте:

return (long) command.Parameters["@proc_id"].Value; 

Это исключает необходимость промежуточного string.

+0

Спасибо, я попробую. Как насчет размера переменной в «db.AddOutParameter (команда,« @proc_id », DbType.Int64, 8)»? Как я могу быть уверен, что это будет 8? – Naor

+1

@Naor: 'Int64' принимает 64 бита, поэтому он, вероятно, всегда занимает 8 байтов. Параметр 'size' не является обязательным, по моему опыту это требуется только для строк. – Andomar

+0

Как необязательно? Я должен сказать, что нет другого варианта. – Naor

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