2010-12-07 67 views
0

我做错了什么? 试图将我的DataTable传递给使用LINQ的存储过程。以下是我的代码。ASP.NET调用存储过程LINQ并传入数据表

 
var sqlCommand = new System.Data.SqlClient.SqlCommand { 
    CommandType = System.Data.CommandType.StoredProcedure, 
    CommandText = "UserIdList" 
}; 

var dataTable = new System.Data.DataTable("IdList"); 
dataTable.Columns.Add("AttributeIds", typeof(Int32)); 
dataTable.Rows.Add(26); 
dataTable.Rows.Add(40); 
dataTable.Rows.Add(41); 
dataTable.Rows.Add(45); 
dataTable.Rows.Add(78); 
dataTable.Rows.Add(33); 
dataTable.Rows.Add(36); 

//The parameter for the SP must be of SqlDbType.Structured 
var parameter = new System.Data.SqlClient.SqlParameter { 
    ParameterName = "@AttributeIds", 
    SqlDbType = System.Data.SqlDbType.Structured, 
    TypeName = "ecs.IDList", 
    Value = dataTable, 
}; 

sqlCommand.Parameters.Add(parameter); 

var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault(); 


+0

而你得到的错误是? – InSane 2010-12-07 15:22:34

回答

1

这似乎是问题

var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault(); 

在代码中,要传递一个SqlCommand对象作为第一个参数和用户ID作为第二个参数。

数据上下文ExecuteQuery method has 2 overloads

ExecuteQuery<TResult>(String, Object[]) 
ExecuteQuery(Type, String, Object[]) 

你似乎是使用过载1 - 即ExecuteQuery<TResult>(String, Object[])但在这种情况下,你需要指定返回对象的类型

如: -

var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers WHERE City = {0}", "London"); 

注意:db.ExecuteQuery<Customer>在上面的例子中是我所知道的发誓。

我认为这可能是错误的原因,因为编译器将您的请求映射到过载2,而不是返回任何值,但需要3个参数导致您的A query parameter cannot be of type 'System.Data.SqlClient.SqlCommand错误。

相关问题