2013-03-20 20 views
-1

我有更新語句的問題。這是我的vb.net服務器端代碼:vb.net中的更新查詢不起作用

Public Function UpdateRow() As DataTable 

    Dim query As String = "Update Intranet.dbo.Gn_ISCoordinators SET cUserName='" & tbUsername.Text.Trim() & 
     "',lDeptUser=" & CByte(rblDept.SelectedIndex) & " WHERE cUserName=" & "'" & Session("Edit") & "'" 
    Dim hehe As DataTable = New DataTable() 
    Using adapter1 = New SqlDataAdapter(query, ConfigurationManager.ConnectionStrings("IntranetConnectionString").ConnectionString) 
     adapter1.Fill(hehe) 
     Response.Redirect("~/Home.aspx") 
     Session("Edit") = Nothing 
     Return hehe 
    End Using 

End Function 

而且我在這裏稱之爲:

Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click 
If Not Session("Edit") Is Nothing Then 
     UpdateRow() 
End If 

我想它得到文本從單選按鈕列表的數據,並將數據和更新查詢與數據庫上的一個。在我的情況下,Session("Edit")與我想用文本框的文本替換它的域相同。當我按下按鈕時,它不會給我任何改變。問題究竟在哪裏?

請幫幫我。

Thanx提前。

回答

1

您正在運行更新查詢。您需要使用ExecuteNonQuery執行它,適配器的Fill命令會從數據庫中讀取數據而不寫入它。並且您的數據不在數據庫中

Public Function UpdateRow() As DataTable 

    Dim query As String = "Update Intranet.dbo.Gn_ISCoordinators SET [email protected]" + 
          ",[email protected] WHERE [email protected]" 
    Using con = new SqlConnection(ConfigurationManager.ConnectionStrings("IntranetConnectionString").ConnectionString)  
     con.Open() 
     Dim cmd = new SqlCommand(query, con) 
     cmd.Parameters.AddWithValue("@uname", tbUsername.Text.Trim()) 
     cmd.Parameters.AddWithValue("@dept", CByte(rblDept.SelectedIndex)) 
     cmd.Parameters.AddWithValue("@oldname", Session("Edit")) 
     cmd.ExecuteNonQuery() 
    End Using 
End Function 

還請注意,您不應串聯字符串以形成sql命令。這種方法導致了一個非常嚴重的安全問題,稱爲Sql Injection

+0

它給了我一個綠色的行在'結束函數'並寫'空引用異常可能會發生'。另外,它不會和我一起工作。 – 7alhashmi 2013-03-20 08:50:49

+0

你有什麼錯誤? (除了綠線) – Steve 2013-03-20 08:57:58

+0

沒有錯誤,而不是綠線。但它不起作用。我不知道爲什麼。在我按下按鈕之後,它只保留用戶名。彷彿我什麼都沒做。 – 7alhashmi 2013-03-20 09:01:01