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# 从 ASP.NET 中的 SQL Server 数据库中检索和显示 GridView 中的值