2013-08-29 77 views
2

我有一个自定义类型如下的程序:调用存储过程与自定义类型参数从C#?

CREATE PROCEDURE MyProc 
    @Arg1 CustomArgType readonly 
AS 
BEGIN 
. 
. 
. 
END 

而且在自定义类型是:

CREATE TYPE dbo.CustomArgType as TABLE 
(
    SomeInt int not null 
) 

我如何可以调用在C#上面的存储过程?

可以使用哪种适配器? EF等ORM可以使用这种存储过程吗?

+1

“表值参数” - raw ado.net当然可以(虽然它的工作效果取决于场景) –

回答

0

为了验证这一点,我伸出你的存储过程,使其返回参数表的第一行:

CREATE PROCEDURE MyProc 
    @Arg1 CustomArgType readonly 
AS 
BEGIN 
    select top 1 SomeInt from @Arg1 
END 

现在我可以用下面的代码在C#中执行存储过程:

using (var conn = new SqlConnection("Data Source=localhost;Initial Catalog=temp;User ID=sa")) 
{ 
    conn.Open(); 

    DataTable dt = new DataTable(); 
    dt.Columns.Add("SomeInt", typeof(Int32)); 

    dt.Rows.Add(new Object[] { 3 }); 

    var command = conn.CreateCommand(); 
    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "MyProc"; 
    command.Parameters.Add(new SqlParameter("@Arg1", dt)); 
    object returnValue = command.ExecuteScalar(); 

} 

returnValue是3我期待的(我插入参数表中的第1行)。

不幸的是,我不太了解EF,所以我不能说你是否可以这样做。

相关问题