2010-12-07 5 views
0

何が間違っていますか? LINQを使用して、自分のDataTableをストアドプロシージャに渡そうとしています。以下は私のコードです。ASP.NETはLINQを使用してprocを呼び出し、DataTableを渡します

 
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

+0

@InSane - エラーmsg is:クエリパラメータの型が 'System.Data.SqlClient.SqlCommand'であることはできません。 – Mark

+0

'myDC.DC'オブジェクトのデータ型は何ですか? – InSane

答えて

1

これはあなたのコードで

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

問題のようです、あなたは第二パラメータとして最初のパラメータとのuserIdとしてSqlCommandオブジェクトを渡しています。

データコンテキストは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というエラーが発生するため、これがエラーの原因になると思います。

関連する問題