2010-12-07 66 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錯誤。

相關問題