2014-01-06 31 views
-2
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

public partial class Editprofile : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = ConfigurationManager.ConnectionStrings["ProfileCS"].ConnectionString; 

      string sql = "select userid from Profile"; 
      SqlCommand cmd = new SqlCommand(); 
      SqlDataReader dr; 
      DataTable dt = new DataTable(); 

      cmd.CommandText = sql; 
      cmd.Connection = con; 

      con.Open(); 
      dr = cmd.ExecuteReader(); 
      dt.Load(dr); 
      ddl_userid.DataSource = dt; 
      ddl_userid.DataTextField = "userid"; 
      ddl_userid.DataValueField = "userid"; 
      ddl_userid.DataBind(); 
     } 
    } 
    protected void ddl_userid_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     SqlConnection con = new SqlConnection(); 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["ProfileCS"].ConnectionString; 

     string sql = "Select studname,gender,email,birthdate,contact from profile where userid='" + ddl_userid.SelectedValue + "'"; 
     SqlCommand cmd = new SqlCommand(); 
     SqlDataReader dr; 
     DataTable dt = new DataTable(); 

     cmd.CommandText = sql; 
     cmd.Connection = con; 

     con.Open(); 
     dr = cmd.ExecuteReader(); 

     dt.Load(dr); 

     tb_studname.Text = dt.Rows[0]["studname"].ToString(); 
     tb_gender.Text = dt.Rows[0]["gender"].ToString(); 
     tb_email.Text = dt.Rows[0]["email"].ToString(); 
     tb_age.Text = dt.Rows[0]["birthdate"].ToString(); 
     tb_contact.Text = dt.Rows[0]["contact"].ToString(); 
     Session["dt"] = dt; 
    } 
    protected void bn_reset_Click(object sender, EventArgs e) 
    { 
     DataTable dt = (DataTable)Session["dt"]; 
     tb_studname.Text = dt.Rows[0]["studname"].ToString(); 
     tb_gender.Text = dt.Rows[0]["gender"].ToString(); 
     tb_email.Text = dt.Rows[0]["email"].ToString(); 
     tb_age.Text = dt.Rows[0]["birthdate"].ToString(); 
     tb_contact.Text = dt.Rows[0]["contact"].ToString(); 

    } 
    protected void bn_update_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(); 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["ProfileCS"].ConnectionString; 

     String name = tb_studname.Text; 
     String gender = tb_gender.Text; 
     String email = tb_email.Text; 
     String age = tb_age.Text; 
     String contact = tb_contact.Text; 

     string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact; 
     sql=sql +"where userid='"+ddl_userid+"'"; 

     SqlCommand cmd =new SqlCommand(); 
     cmd.CommandText=sql; 
     cmd.Connection=con; 
     try 
     { 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      lbl_msg.Text="Record Updated!"; 
     } 
     catch(Exception ex) 
     { 
      lbl_msg.Text="Problem encountered:"+ex.Message; 

     } 
     finally 
     { 
      con.Close(); 
      con.Dispose(); 
      cmd.Dispose(); 
     } 


    } 
} 

當我加載頁面的復位按鈕作品嗨,大家好預期,但是當我嘗試這樣 問題遇到發生更新信息按鈕錯誤消息」後閉合的引號。字符串「」「系統」附近語法不正確。系統「:字符串「」附近有語法錯誤

+1

在哪條線上? 「userid」列的類型是什麼,「ddl_userid.SelectedValue」的值是什麼?請注意_SQL Injection_攻擊。 –

+5

[SQL注入警報](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你應該**不**連接你的SQL語句 - 使用**參數化查詢**而不是爲了避免SQL注入 –

+0

@SonerGönüluserid是nvarchar(50),你是什麼意思的值ddl_userid.SelectedValue – sherrez

回答

5

錯誤後未閉合的引號是在更新語句

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+ 
      email+"',birthdate='"+age+"',contact='"+contact +"'"; 

說,你應該刪除所有這些字符串連接,並使用參數化查詢缺少結束引號

有太多的點來解決,我只是顯示一個建議修復的更新

string sql="Update Profile Set [email protected],[email protected],[email protected]," + 
      "[email protected],[email protected] where [email protected]"; 

    SqlCommand cmd =new SqlCommand(); 
    cmd.CommandText = sql; 
    cmd.Parameters.AddWithValue("@name",name); 
    cmd.Parameters.AddWithValue("@gender",gender); 
    cmd.Parameters.AddWithValue("@email",email); 
    cmd.Parameters.AddWithValue("@age",age); 
    cmd.Parameters.AddWithValue("@contact",contact); 
    cmd.Parameters.AddWithValue("@uid",ddl_userid); 
    cmd.ExecuteNonQuery(); 

這樣你的命令字符串是更具可讀性和你避免微妙的引用錯誤。
此外,引用您的參數的工作被傳遞給框架代碼,並且不存在SQL注入的可能性。

+0

感謝他的工作幫助 – sherrez

0

問題與以下行:

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact; 

你需要完成的字符串如下:看,我編輯的語句結束。

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact +"' "; 

注:我建議你,你應該使用,而不是進行直接的字符串參數化查詢。

0

變化:

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact; 

要:

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"',contact='"+contact + "' "; 

缺少接觸後的單引號。然後,您需要一個空間,以便添加Where子句的下一行工作。

+0

謝謝他人工作很好! – sherrez

1

我覺得這一行的問題;

string sql="Update Profile Set studName='"+name+"',gender='"+gender+"',email='"+email+"',birthdate='"+age+"', 
contact='"+contact; 
       ^^ here missing '" 
sql=sql +"where userid='"+ddl_userid+"'"; 

但請不要用這種方式。改爲使用parameterized queries。這種字符串連接對於SQL Injection攻擊是開放的。

還使用參數化查詢可提高可讀性。

例如;

string sql = @"Update Profile Set [email protected],[email protected],[email protected], [email protected], [email protected] 
       where [email protected]"; 
SqlCommand cmd =new SqlCommand(sql, con); 
cmd.Parameters.AddWithValue("@studName", studName); 
cmd.Parameters.AddWithValue("@gender", gender); 
cmd.Parameters.AddWithValue("@email", email); 
cmd.Parameters.AddWithValue("@birthdate", birthdate); 
cmd.Parameters.AddWithValue("@contact", contact); 
cmd.Parameters.AddWithValue("@userid", userid); 
cmd.ExecuteNonQuery(); 
+0

感謝所有人,但不用擔心它只是一個基本的學校項目與初學者的C#知識! – sherrez

+2

@sherrez:**特別是**如果你是一名學習者 - 你應該學** ** PROPER **的方式!不要學習蹩腳,笨拙的方式 - 那麼你會繼續這樣做你的一生! **現在**努力學習如何做到這一點**正確** - 一勞永逸! –

+0

@mark_s我同意你關於做事情的正確方法,但實際的問題是代碼出了什麼問題,而不是編碼技術出了什麼問題。 –