Поиск…


Выполнить команду, которая не возвращает результатов

IDBConnection db = /* ... */  
var id = /* ... */

db.Execute(@"update dbo.Dogs set Name = 'Beowoof' where Id = @id",
   new { id });

Хранимые процедуры

Простое использование

Dapper полностью поддерживает хранимые процедуры:

var user = conn.Query<User>("spGetUser", new { Id = 1 }, 
                            commandType: CommandType.StoredProcedure)
           .SingleOrDefault();

Параметры ввода, вывода и возврата

Если вы хотите что-то более интересное, вы можете сделать:

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", 
      dbType: DbType.Int32, 
      direction: ParameterDirection.Output);
p.Add("@c", 
      dbType: DbType.Int32, 
      direction: ParameterDirection.ReturnValue);

conn.Execute("spMagicProc", p, 
             commandType: CommandType.StoredProcedure); 

var b = p.Get<int>("@b");
var c = p.Get<int>("@c"); 

Табличные параметры

Если у вас есть хранимая процедура, которая принимает параметр, оцениваемый по таблице, вам необходимо передать DataTable, который имеет ту же структуру, что и тип таблицы в SQL Server. Ниже приведено определение типа таблицы и процедуры, использующей ее:

CREATE TYPE [dbo].[myUDTT] AS TABLE([i1] [int] NOT NULL);
GO
CREATE PROCEDURE myProc(@data dbo.myUDTT readonly) AS
SELECT i1 FROM @data;
GO
/*
-- optionally grant permissions as needed, depending on the user you execute this with.
-- Especially the GRANT EXECUTE ON TYPE is often overlooked and can cause problems if omitted.
GRANT EXECUTE ON TYPE::[dbo].[myUDTT] TO [user];
GRANT EXECUTE ON dbo.myProc TO [user];
GO
*/

Чтобы вызвать эту процедуру из c #, вам необходимо сделать следующее:

// Build a DataTable with one int column
DataTable data = new DataTable();
data.Columns.Add("i1", typeof(int));
// Add two rows
data.Rows.Add(1);
data.Rows.Add(2);

var q = conn.Query("myProc", new {data}, commandType: CommandType.StoredProcedure);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow