2016-11-19 48 views
0

我在從數據庫中選擇一些數據並將數據保存到文本框時遇到了問題。我有以下的配置表:asp.net c中的datareader錯誤#

This is my table design

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())時出現錯誤。這個錯誤異常。

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 wrapCloseInAction)在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException異常,布爾breakConnection,行動1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows) at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more) at System.Data.SqlClient.SqlDataReader.Read() at Skripsi.Mahasiswa.Page_Load(Object sender, EventArgs e) in C:\Users\Henz\documents\visual studio 2015\Projects\Skripsi\Skripsi\Mahasiswa.aspx.cs:line 26 ClientConnectionId:aebdd470-263a-43a9-a7f3-12885668d946 Error Number:245,State:1,Class:16

請幫我解決這個問題。我還是個初學者。謝謝你。

+2

發佈錯誤的日誌! – Sid

+0

什麼是錯誤? –

+0

'while(reader.Read())'是不是錯誤,你可以添加拋出異常消息 – Fabio

回答

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將給他們整個表的內容,甚至刪除數據庫的內容。