C# asp.mcv如何将字符串转换为布尔标志
我也在尝试做一个登录页面。但当我按F5键时,页面上的这一行出现错误:C# asp.mcv如何将字符串转换为布尔标志,c#,asp.net,razor,C#,Asp.net,Razor,我也在尝试做一个登录页面。但当我按F5键时,页面上的这一行出现错误: flag = Convert.ToBoolean(cmd.ExecuteScalar()); Login.cs using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Configuration; using System.Data.SqlClient; using Sy
flag = Convert.ToBoolean(cmd.ExecuteScalar());
Login.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
namespace LoginFormApp.Models
{
public class Login
{
[Required(ErrorMessage = "Username is required")]
[Display(Name = "Username")]
public string username { get; set; }
[Required(ErrorMessage = "Password is required")]
[Display(Name = "Password")]
public string password { get; set; }
public bool checkUser(string username, string password)
{
bool flag = false;
string connString = ConfigurationManager.ConnectionStrings["MyDatabaseEntities"].ConnectionString ;
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("Select count(*) from Login where username='" + username + "' and password='" + password + "'", conn);
flag = Convert.ToBoolean(cmd.ExecuteScalar());
return flag;
}
}
}
}
Index.cshtml
@model LoginFormApp.Models.Login
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>DNDB Login</title>
</head>
<body>
<div style="margin:0 auto; text-align: center; border: 2px; border-style: solid; width:400px;background-color:lightgrey">
@using (Html.BeginForm())
{
<table>
<tr>
<td>@Html.LabelFor(m => m.username)</td>
<td>@Html.TextBoxFor(m => m.username)</td>
<td>@Html.ValidationMessageFor(m => m.username)</td>
</tr>
<tr>
<td>@Html.LabelFor(m => m.password)</td>
<td>@Html.PasswordFor(m => m.password)</td>
<td>@Html.ValidationMessageFor(m => m.password)</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="Submit" />
</td>
</tr>
<tr>
<td></td>
<td>
@ViewBag.Message
</td>
</tr>
</table>
}
</div>
</body>
</html>
提前谢谢。你做错了,
ExecuteScalar()始终返回第一列的值,因此在您的情况下,它会返回无法直接转换为布尔值的总计数
int totalCount = Convert.ToInt32(cmd.ExecuteScalar());
flag = totalCount > 0;
你可以用
flag = (int)cmd.ExecuteScalar() == 1;
这也改变了它:conn.Open();SqlCommand cmd=new SqlCommand(“从登录名中选择count(*),其中username='“+username+”,password='“+password+”,conn);int totalCount=Convert.ToInt32(cmd.ExecuteScalar());flag=totalCount>0;返回标志;现在行:int totalCount=Convert.ToInt32(cmd.ExecuteScalar());给出一个错误你想让所有的代码也看到我的错误是什么吗?你能检查cmd.ExecuteScalar()的值吗?但是你没有更改,flag=Convert.ToBoolean(cmd.ExecuteScalar());返回标志;当我添加代码时,程序会说这一行是错误的:int totalCount=Convert.ToInt32(cmd.ExecuteScalar());我现在的总代码是:conn.Open();SqlCommand cmd=new SqlCommand(“从登录名中选择count(*),其中username='“+username+”,password='“+password+”,conn);int totalCount=Convert.ToInt32(cmd.ExecuteScalar());flag=totalCount>0;返回标志;我添加了所有代码,包括你的代码行。它将您的行视为错误。@Marijn-什么类型的错误?在句法上是正确的;但是,如果cmd.ExecuteScalar自身抛出异常或返回非int的对象,则会发生类型转换错误。如果没有stacktrace,则很难判断这一点。@Marijn-SQL server返回一个错误,说明您的SQL语句无法执行。它发生在这一行,因为ExecuteScalar发送命令并通过此异常通知您此错误。数据表“Login”未知。可能表格尚未创建或拼写错误。已修复。谢谢
int totalCount = Convert.ToInt32(cmd.ExecuteScalar());
flag = totalCount > 0;
flag = (int)cmd.ExecuteScalar() == 1;