条件表达式中的数据类型不匹配 (Convert.ToInt32(cmd.ExecuteScalar());)

Data type mismatch in criteria expression(Convert.ToInt32(cmd.ExecuteScalar());)

如果用户输入的 ID 与 MS ACCESS DATABASE 中的记录匹配,我将尝试在数据库的文本框中显示名称。 我在第 int count = Convert.ToInt32(cmd.ExecuteScalar());

行收到错误 条件表达式 中的数据类型不匹配

以下是我的aspx.cs代码-

protected void Button1_Click(object sender, EventArgs e)
{
    clear();
    idcheck();

    DataTable dt = new DataTable();
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\dfg\fd\Visual Studio 2010\WebSites\WebSite21\App_Data\UPHealth.mdb");

    con.Open();

    str = "SELECT [DoctorName] FROM [DoctorInfo] WHERE DoctorID='" + TextBox1.Text.Trim() + "'";

    OleDbCommand cmd = new OleDbCommand(str, con);
    OleDbDataReader dr = cmd.ExecuteReader();
    if (dr.Read())
    {
        TextBox2.Text = dr["DoctorID"].ToString();
        dr.Close();
        con.Close();
    }
}

public void idcheck()
{
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\dfg\fd\Visual Studio 2010\WebSites\WebSite21\App_Data\UPHealth.mdb");
    con.Open();
    str = "SELECT count(DoctorName) FROM [DoctorInfo] WHERE DoctorID='" + TextBox1.Text.Trim() + "'";
    OleDbCommand cmd = new OleDbCommand(str, con);
    int count = Convert.ToInt32(cmd.ExecuteScalar());
    if (count > 0)
    {
        Label21.Text = "Doctor Name";
    }
    else
    {
        Label21.Text = "Id Does not Exist";
    }
}

void clear()
{
    TextBox2.Text = "";
}

我想那是因为您将 ID(通常是数值)作为文本字段传递:

DoctorID='" + TextBox1.Text.Trim() + "'

应该是:

DoctorID=" + TextBox1.Text.Trim()

另一个问题出现了,因为你很容易受到 SQL 注入。如果文本框包含 1; delete users 怎么办?那么您的整个用户 table 将是空的。经验教训:使用参数化查询!

那么你可以将SQL表示为:

DoctorID= ?

并在请求中添加参数:

cmd.Parameters.AddWithValue("?", TextBox1.Text.Trim());