我在从数据库中选择一些数据并将数据保存到文本框时遇到了问题。我有以下个人资料表:
<?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");
}
时我收到错误。这个错误异常。
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
请帮我解决这个问题。我还是个初学者。谢谢。
答案 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,这将给他们整个表的内容,甚至删除内容数据库。