2013-05-16 60 views
0

我的SQL表中有一個位域,如果設置爲0,我需要更新到1位。我編寫了代碼來設置每個條目的字段,但我需要檢查它是否已經在0,因此我可以記錄發生了什麼變化。VB.net - 檢查SQL字段,看是否設置了位

這是我已經:

Public Function Update_User_to_TR(ByVal strUserName As String) As String 

    Dim myUserName As String = strUserName.Trim 
    Dim myReturn As String 

    Try 

     Dim sql As New SQL 
     Dim strQuery As String 

     strQuery = "Update dbo.USERS set user_field_Department_TR = 1 where USER_NAME = '" & myUserName & "'" 
     myReturn = sql.SQLUpdateWT(strQuery) 

    Catch ex As Exception 
     myReturn = ex.ToString 
     MsgBox(myReturn) 
    End Try 

    Return myReturn 

End Function 
+8

與您的問題無關,但非常重要 - 現在請閱讀[Bobby Tables](http://bobby-tables.com/)。我們將等待。 Sql注入是一件非常糟糕的事情。 –

+1

您正在使用哪個版本的SQL Server?如果是2005或更新的版本,可以在where子句中添加「user_field_Department_TR = 0」,然後使用OUTPUT子句,比如UPDATE ... SET ... WHERE ... OUTPUT,<需要登錄的任何字段> INTO LogTable。請注意,LogTable需要提前定義。 –

+0

爲什麼不在設置之前在單獨的查詢中讀取值? –

回答

0

你應該升級到存儲過程或函數,在這種情況下,但這裏是一個簡單的查詢。

"Declare @WillUpdate bit;Set @WillUpdate = 0;" & _ 
"If Exists(Select user_name from dbo.Users where user_name ='" & myUserName & _ 
"'  and user_field_department_tr = 0 " & _ 
" Begin " & _ 
"  Update dbo.USERS set user_field_Department_TR = 1 where USER_NAME = '" & myUserName & "';" & _ 
" Insert Into MyLog(field1, field2) " & _ 
"  Values('sampledata', 'field was updated from 0 to 1');" & _ 
" End" 

但請閱讀其他意見,瞭解SQL注入,以及如何它的壞,然後學習如何使用參數化查詢,如與ADO.NET。