2012-12-30 70 views
1

我有註冊爲我的數據庫表。我想將我的信息更新到我的SQL Server數據庫中。但它不起作用,它不會發生任何錯誤,但數據鍵不會更新到我的數據庫中。有人請幫我解決我的代碼有什麼問題嗎?謝謝。更新SQL Server數據庫中的數據

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True"); 

    SqlCommand cmd = new SqlCommand("UPDATE registration SET username = @username, password = @password, retypepassword = @retypepassword, gender = @gender, birth = @birth, address = @address, city = @city, country = @country, postcode = @postcode, email = @email, carno = @carno", con); 

    con.Open(); 

    cmd.Parameters.AddWithValue("@username", TextBoxUsername.Text); 
    cmd.Parameters.AddWithValue("@password", TextBoxPassword.Text); 
    cmd.Parameters.AddWithValue("@retypepassword", TextBoxRPassword.Text); 
    cmd.Parameters.AddWithValue("@gender", DropDownListGender.Text); 
    cmd.Parameters.AddWithValue("@birth", DropDownListDay.Text); 
    cmd.Parameters.AddWithValue("@address", TextBoxAddress.Text); 
    cmd.Parameters.AddWithValue("@city", TextBoxCity.Text); 
    cmd.Parameters.AddWithValue("@country", DropDownListCountry.Text); 
    cmd.Parameters.AddWithValue("@postcode", TextBoxPostcode.Text); 
    cmd.Parameters.AddWithValue("@email", TextBoxEmail.Text); 
    cmd.Parameters.AddWithValue("@carno", TextBoxCarno.Text); 

    cmd.ExecuteNonQuery(); 

    con.Close(); 

    if (IsPostBack) 
    { 
     Response.Redirect("UpdateSuccess.aspx"); 
    } 

後,我點擊確認它在某種程度上只更新我的專欄gender從男性到女性,數據的其他列不會更新。

+0

表中的主鍵是什麼? 你可以添加一個try/catch並查看是否有異常? –

+0

命令在發送到服務器時的外觀如何?如果您有完整版本,請使用分析器來檢查發送到服務器的內容。 – alzaimar

+0

這似乎是零感。認真。對於USERNAME,您不需要更新,因爲您也可以在where子句中使用它。 Set name = a where name = a?永遠不要更新主鍵。那麼,也給我們錯誤消息。 – TomTom

回答

2

這可能是因爲在UPDATE和WHERE中都使用@username。如果它改變了,那麼WHERE將是錯誤的,如果它沒有改變,它可以被排除在查詢之外。

-3

我想在頁面加載你負荷再次的所有數據和的button1_Click頁面加載後運行,並且你失去了全部的數據 你可以嘗試在Page_Load方法代碼

private void Page_Load() 
{ 
    if (IsPostBack) 
    { 
     SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True"); 

    SqlCommand cmd = new SqlCommand("UPDATE registration SET username = @username, password = @password, retypepassword = @retypepassword, gender = @gender, birth = @birth, address = @address, city = @city, country = @country, postcode = @postcode, email = @email, carno = @carno " + "WHERE username = @username", con); 

    con.Open(); 
. 
. 
. 

    } 
} 
+0

-1。思考較少,答案更準確? SQL是開始的。 – TomTom

-4

我從來沒有見過這種類型的句法。通常如果使用參數,則使用stored proc(最佳實踐)。如果使用inline SQL,則將SQL語句構建爲單個文本行並執行它。我會建議爲其中一個重新編碼。

如果你想試試你已經開始的,在你的SQL,你可能需要首先聲明所有的變量。例如

SqlCommand cmd = new SqlCommand("declare @username varchar(100), @password varchar(100), 
@retypepassword varchar(100) @gender varchar(10), @birth date, @address varchar(100), 
@city varchar(100) @country varchar(100), @postcode varchar(10), @email varchar(100), 
@carno varchar(100) UPDATE registration SET username = @username, password = @password, 
retypepassword = @retypepassword, gender = @gender, birth = @birth, address = @address, 
city = @city, country = @country, postcode = @postcode, email = @email, carno = @carno", 
con); 
+0

有沒有要求,你不能使用內聯SQL文本的參數,並且你絕對不想像上面的內聯工作時聲明變量。 –

+1

誰,這是我見過發佈更新聲明最臃腫的方式。 – TomTom

-1

SQL更新

的SqlCommand CMD =新的SqlCommand( 「更新[測試]。[DBO]。[學生]:設定名=「」 + tb1.Text + '「,年齡=' 「+ tb2.Text +」',mobile ='「+ tb3.Text +」'where id ='「+ tb4.Text +」'「,con);

+0

歡迎來到堆棧溢出:-) 請看[答]。您應該提供一些信息,說明爲什麼您的代碼可以解決問題。 僅有代碼的答案對社區沒有用處。 – JimHawkins

-1
protected void Button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True"); 

    SqlCommand cmd = new SqlCommand("SELECT * FROM registration WHERE username = " + TextBoxUsername.Text + "UPDATE registration SET username = @username, password = @password, retypepassword = @retypepassword, gender = @gender, birth = @birth, address = @address, city = @city, country = @country, postcode = @postcode, email = @email, carno = @carno", con); 

    con.Open(); 

    cmd.Parameters.AddWithValue("@username", TextBoxUsername.Text); 
    cmd.Parameters.AddWithValue("@password", TextBoxPassword.Text); 
    cmd.Parameters.AddWithValue("@retypepassword", TextBoxRPassword.Text); 
    cmd.Parameters.AddWithValue("@gender", DropDownListGender.Text); 
    cmd.Parameters.AddWithValue("@birth", DropDownListDay.Text); 
    cmd.Parameters.AddWithValue("@address", TextBoxAddress.Text); 
    cmd.Parameters.AddWithValue("@city", TextBoxCity.Text); 
    cmd.Parameters.AddWithValue("@country", DropDownListCountry.Text); 
    cmd.Parameters.AddWithValue("@postcode", TextBoxPostcode.Text); 
    cmd.Parameters.AddWithValue("@email", TextBoxEmail.Text); 
    cmd.Parameters.AddWithValue("@carno", TextBoxCarno.Text); 

    cmd.ExecuteNonQuery(); 

    con.Close(); 

    if (IsPostBack) 
    { 
     Response.Redirect("UpdateSuccess.aspx"); 
    } 
+1

只是發佈工作代碼不是一個很好的答案,試着解釋錯誤的地方 – Atsch