ASP.NET вызывает хранимый процесс с LINQ и передает в DataTable - PullRequest
0 голосов
/ 07 декабря 2010

Что я делаю не так?Попытка передать мой DataTable хранимому процессу с помощью 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();


1 Ответ

1 голос
/ 08 декабря 2010

Кажется, это проблема

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

В вашем коде вы передаете объект sqlCommand в качестве первых параметров и userId в качестве второго параметра.

Контекст данных Метод ExecuteQuery имеет 2 перегрузки

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...