【问题标题】:How to find out only one record in database using stored procedure by database.Sqlquery()如何使用存储过程通过database.Sqlquery()在数据库中仅找出一条记录
【发布时间】:2020-09-28 12:52:24
【问题描述】:

我打算创建这个例子来展示我的问题。

我的数据库中有一个表:

然后我创建了一个存储过程来按 Id 查找记录

CREATE PROCEDURE sp_get 
    @id INT
AS 
BEGIN
    SELECT * 
    FROM a 
    WHERE id = @id
END

接下来,我使用Database.SqlQuery()来执行这个存储过程:

a record = db.Database.SqlQuery<a>("sp_get @id", new SqlParameter("@id",id));

我收到此错误:

无法将类型 System.Data.Entity.Infrastructure.DbRawSqlQuery[test_sp_insert_edit_remove.Database.a] 隐式转换为“test_sp_insert_edit_remove.Database.a”

是的,我知道这是错误的,但我不知道如何解决这个错误。

帮我解决这个错误

【问题讨论】:

  • 您面临什么问题/?
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • "I have no idea to solve this error. Help me fix that error" ← 什么错误?您没有包含任何错误信息。是编译时错误吗?如果是这样,请包括完整的错误消息以及它出现在哪一行。这是您在运行时遇到的异常吗?如果是这样,包括整个异常,包括消息、堆栈跟踪、类型和嵌套异常的重复。 edit您的问题并包含这些详细信息。
  • 我的目的是通过执行 SP_GET 获取记录,然后将其分配给@viveknuna 类型的记录变量
  • a record 更改为 var record。现在将鼠标悬停在var。它显示了什么?

标签: c# sql-server asp.net-mvc stored-procedures


【解决方案1】:

我会通过举例来帮助你。以便您可以参考该概念并​​在您的程序中应用。假设您需要获取学生姓名。所以你会像这样运行查询。

string studentName = db.Database.SqlQuery<string>("Select studentName from Student where studentid=@id", new SqlParameter("@id", 1))
                            .FirstOrDefault();

因此,在您的情况下,您必须创建一个与表等效的类并使用它。假设&lt;ClassName&gt;

【讨论】:

  • 是的,我知道,但是有没有办法通过存储过程来解决这个问题?
  • 是的,这很好,但我想通过存储过程解决这个错误?你能帮我解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 2019-02-06
  • 2012-03-15
  • 1970-01-01
相关资源
最近更新 更多