【问题标题】:ASP.NET calling stored proc with LINQ and passing in DataTableASP.NET 使用 LINQ 调用存储过程并传入 DataTable
【发布时间】:2011-05-21 15:51:25
【问题描述】:

我做错了什么? 试图将我的 DataTable 传递给使用 LINQ 的存储过程。下面是我的代码。

var sqlCommand = 新 System.Data.SqlClient.SqlCommand { CommandType = System.Data.CommandType.StoredProcedure, CommandText = "用户 ID 列表" }; 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); //SP的参数必须是SqlDbType.Structured var 参数 = 新 System.Data.SqlClient.SqlParameter { ParameterName = "@AttributeIds", SqlDbType = System.Data.SqlDbType.Structured, TypeName = "ecs.IDList", 值 = 数据表, }; sqlCommand.Parameters.Add(参数); var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault();

【问题讨论】:

  • 你得到的错误是??
  • @InSane - 错误消息是:查询参数不能是“System.Data.SqlClient.SqlCommand”类型。
  • myDC.DC对象的数据类型是什么?

标签: asp.net linq stored-procedures datatable


【解决方案1】:

这似乎是问题

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

在您的代码中,您将 sqlCommand 对象作为第一个参数传递,将 userId 作为第二个参数传递。

一个数据上下文ExecuteQuery method has 2 overloads

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

您似乎正在使用 Overload 1 - 即 ExecuteQuery&lt;TResult&gt;(String, Object[]) 但在这种情况下您需要指定返回对象的类型

例如:-

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

注意:上述示例中的 db.ExecuteQuery&lt;Customer&gt; 是我所指的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多