我尝试使用实体框架和c#语言对数据库进行数据处理,如下所示:
protected void Searchbutton_Click(object sender, EventArgs e)
{
StudentDBModelContainer db = new StudentDBModelContainer();
var student = new Student();
student =(from i in db.StudentSet where i.Id==2 select i).First();
TextBox1.Text = student.LastName;
}
但它导致了这个问题:
Erreur du serveur dans l'application '/'.
La séquence ne contient aucun élément.
Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.InvalidOperationException: La séquence ne contient aucun élément.
Erreur source:
Ligne 19 : StudentDBModelContainer db = new StudentDBModelContainer();
Ligne 20 : var student = new Student();
Ligne 21 : student =(from i in db.StudentSet where i.Id==2 select i).First();
Ligne 22 : TextBox1.Text = student.LastName;
Ligne 23 :
Fichier source : d:\aimen\Projects\Motashaiba\Motashaiba\Default.aspx.cs Ligne : 21
英文翻译:
' /'中的服务器错误应用。
序列不包含任何元素。
描述:执行当前Web请求期间发生了未处理的异常。检查堆栈跟踪以获取有关错误及其在代码中的起源位置的更多信息。
异常详细信息:System.InvalidOperationException:序列不包含任何元素。
答案 0 :(得分:1)
请改为使用FirstOrDefault()
,然后检查student
是否为null
(如果没有返回任何记录,则为student = (from i in db.StudentSet where i.Id == 2 select i).FirstOrDefault();
if (student != null)
TextBox1.Text = student.LastName;
。
protected void Searchbutton_Click(object sender, EventArgs e)
{
var db = new StudentDBModelContainer();
var student = db.FirstOrDefault(s => s.Id == 2);
if (student != null)
TextBox1.Text = student.LastName;
}
此外,您可以使用方法语法缩短一点:
{{1}}
如果上面的代码不找不到记录,如果数据库中不存在该记录,那么 将阻止在预期记录中抛出异常找不到。
您的查询非常基本,如果记录确实存在,应该可以正常工作。仔细检查连接字符串,确保您已连接到正确的数据库。
答案 1 :(得分:0)
如果您知道至少有一条记录,则只使用First()。在您的情况下,如果您按照另一个评论者的建议使用FirstOrDefault(),那么您将获得null。
它可以为空吗?
当我知道会有数据时,我经常使用First(),并且我希望在没有数据时收到错误通知。基本上意思是,如果数据库被顶起,或者某人删除了关键数据,那么我想立即反馈说这些内容已经破坏,这说明它确实取决于你在做什么。