C# asp.mcv如何将字符串转换为布尔标志

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

我也在尝试做一个登录页面。但当我按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 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;