SQL 和 C# 从数据库中检索单个记录

Posted

技术标签:

【中文标题】SQL 和 C# 从数据库中检索单个记录【英文标题】:SQL and C# retrieving a single record from database 【发布时间】:2012-04-15 04:54:57 【问题描述】:

我有一个网页,其中包含一个包含书籍列表的下拉菜单。这些书籍存储在 sql server 上。使用 MVC 和 aspx 页面,我试图弄清楚如何检索有关一本书的信息,以便当用户选择一本书时,它会传递这本书的价格。我是 sql sever 和 var 语句的新手。

    我可以从网页中检索图书名称并将其发送到我的控制器 在我的模型中,我试图在此处获取该数据是我的想法。我想得到价格并存储到一个字符串中。但我见过的获取信息的唯一方法是使用 var 语句。

这样

var price = from p in BooksDB.Price
 where p.Book_Name==bookName
    select new p.Book_Price

但是我如何获取该值并将其存储到基于我从下拉框中检索到的 Books_Name 的字符串中

顺便说一下,我的桌子是这样的

Id_Num   Book_Name    Book_Price
  1       Pro C#       29.99
  2       Beg C++      10.99

【问题讨论】:

如果您在运行查询时可以访问它,我建议您使用您的 Id_Num 字段(我假设它是唯一的)而不是书名。如果您在 id 上有一个唯一键,那么它会更快,并且还消除了由于重复书名而返回多行的可能性。 【参考方案1】:

首先是术语更正。

var 只是编译器允许您用来替换类型的关键字。在编译期间,编译器会根据使用情况来判断类型。

var myString = "hihihi";
string myString = "hihihi";

var 语句与访问数据库无关,尽管添加它是为了让我们懒惰的开发人员更容易使用 LINQ。

您正在做的是创建一个LINQ to SQL 查询。我稍微修改了一下(你不需要创建匿名对象)。创建语句后,您需要通过调用“ToList()、First() 或 FirstOrDefault() 等”来执行它

LINQ 通常对查询使用惰性或延迟评估,并且在您触发执行之前不会执行。

var price = from p in BooksDB.Price
            where p.Book_Name==bookName
            select p.Book_Price;

//assuming Book_Price is stored as a string datatype.
string bookPrice = price.FirstOrDefault();
//otherwise
string bookPrice = (price.FirstOrDefault() ?? "").ToString();

if(!String.IsNullOrEmpty(bookPrice))

    //do something with the string.

【讨论】:

【参考方案2】:

如果我理解正确,下面的内容应该可以工作。

var record = BooksDB.Price.FirstOrDefault(r => r.Book_Name == bookName);

如果此时record 不是null,那么record.Book_Price 应该包含您要查找的数据(不考虑数据库中的歧义。)

【讨论】:

【参考方案3】:

不要使用select new p.Book_Price,而是使用select p.Book_Price 之类的名称。您可以在末尾添加.ToString() 以强制它以字符串形式出现,而不是表中的数据类型。

您还需要将整个 LINQ 语句包装在 () 中并附加 .FirstOrDefault() 以获得一个值。当结果集我们为空时,“OrDefault”部分可以保护您免受异常影响。

【讨论】:

以上是关于SQL 和 C# 从数据库中检索单个记录的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 检索 SQL Server 扩展属性

通过比较多个表条目从单个表中检索数据的 SQL 语句

如何使用 C# 从 ASP.NET 中的 SQL Server 数据库中检索和显示 GridView 中的值

如何使用 c# datareader 和存储过程从 spl server 2012 数据表更新单个记录?

从数组中检索单个数据

c# sqlite - 从数据库中检索 BLOB 文本