asp.net中的datareader错误c#

时间:2016-11-19 12:50:00

标签: c# asp.net

我在从数据库中选择一些数据并将数据保存到文本框时遇到了问题。我有以下个人资料表:

This is my table design

<?php

namespace App\Http\Middleware;

use Closure;

use App\Http\Controllers\Auth;

class CheckIfNewUser
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */

    public function handle($request, Closure $next)
    {
        $user = $request->user();

        if (! is_null($user->last_logged_in_date )) {
            return $next($request);
        }

        // This is where I'm stuck!!!

    }
}

根据我的编码经验,这是正确的。但是在调用if (Session["User"] != null) { try { string user = Session["User"].ToString(); SqlConnection conn = new SqlConnection(@"Data Source=localhost;Initial Catalog=SKRIPSI;User ID=sa;Password=sa"); conn.Open(); string biodata = "select * from mahasiswa where id='"+user+"'"; SqlCommand comm = new SqlCommand(biodata, conn); SqlDataReader reader = comm.ExecuteReader(); while (reader.Read()) { txtid.Text = reader["id"].ToString(); txtnama.Text = reader["nama"].ToString(); txtemail.Text = reader["email"].ToString(); txtkontak.Text = reader["kontak"].ToString(); txtalamat.Text = reader["password"].ToString(); } reader.Close(); conn.Close(); } catch (Exception ex) { Response.Write(ex.ToString()); } } else { Response.Redirect("Login_Form.aspx"); } 时我收到错误。这个错误异常。

System.Data.SqlClient.SqlInternalConnection.OnError中的

while(reader.Read()) 1 wrapCloseInAction)(SqlException异常,Boolean breakConnection,Action System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting the varchar value 'System.Web.UI.WebControls.TextBox' to data type int. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action

请帮我解决这个问题。我还是个初学者。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您要获得单行,请使用if(reader.read())。 while(reader.read())可以循环,当查询出错时,它经常会让人遇到麻烦。

您的数据库中有可空类型。您不是要检查空值。在设置字段之前使用IsDBNull()方法。你必须经历一个额外的步骤,因为这只接受一个int。

if(!reader.IsDBNull(reader.GetOrdinal("nama"))
{
    txtid.Text = reader["id"].ToString();
}

另外,在你的sql语句中,你的id连接周围有单引号。 id列被定义为int,将其添加到单引号中将使其被视为字符串。

 string biodata = "select * from mahasiswa where id="+user+"";

请记住,这种字符串连接方法确保您的网站对sql注入攻击开放,并且编写它的方式有人可以轻松地制作sql,这将给他们整个表的内容,甚至删除内容数据库。