2016-01-26 140 views
-3

Image of the error「變量」未聲明的錯誤

我是新來Vb.net編程,我在這裏需要一些幫助,我假裝發信息到我的數據庫,第一個查詢給我我需要的ID和我將它聲明爲「postoid」,當我稍後嘗試將其稱爲「插入」時,它說它沒有聲明,但我已經將問題搜索了一百次,但找不到答案。

PS:此代碼都在同一專用子

Try 
    mysqlconn.Open() 
    queryrow = "Select * from postos where postos_nome ='" & TextBox1.Text & "'" 
    COMMANDuser1 = New MySqlCommand(queryrow, mysqlconn) 
    READERuser = COMMANDuser1.ExecuteReader 

    While READERuser.Read 
     Dim postoid = READERuser.GetString("postos_id") 
    End While 

    mysqlconn.Close() 

Catch ex As Exception 
End Try 

Dim sqlquery As String = "INSERT INTO computadores VALUES (0,'" & pcname.ToUpper & "','" & ip & "','" & so & "','" & cpu & "','" & ram & "','" & gc & "','" & wserial & "','" & mnome & "','" & mserial & "','" & "--- ,,'Inativo','" & empresaid & "','" & postoid & "','" & userid & "')" 
Dim sqlcommand As New MySqlCommand 

With sqlcommand 

    .CommandText = sqlquery 
    .Connection = mysqlconn 
    .ExecuteNonQuery() 

End With 
MsgBox("Computador Adicionado") 
Dispose() 
Close() 
+1

與您的問題無關,但請仔細閱讀使用SQL參數。字符串連接很容易導致SQL注入。 –

+0

您似乎忘記了打開和關閉插入查詢的連接,並且您需要在Try..Catch結構外面Dim Dim As As String。順便說一句,你不應該有一個空的Catch子句,因爲這可以防止你看到在Try塊中引發的任何錯誤。 –

+0

似乎問題是這個'pcname'? ,我看不到該變量的聲明。 – Japongskie

回答

2

你的變量postoid是外的範圍內,可以在聲明塊外

所有你需要做的就是聲明。它外面的嘗試結構:

Dim postoid As String = "" 

queryrow = "Select postos_id from postos where postos_nome = @PostosNome" 

Using COMMANDuser1 As New MySqlCommand(queryrow, mysqlconn) 
    COMMANDuser1.Parameters.Add("@PostosNome", TextBox1.Text) 

    mysqlconn.Open() 
    READERuser = COMMANDuser1.ExecuteReader() 

    While READERuser.Read 
     postoid = READERuser.GetString("postos_id") 
    End While 

    mysqlconn.Close() 

End Using 

If postoid <> "" Then 
    ' perform the insert... 

我沒有實際使用嘗試在,正如你在Catch塊沒有代碼 - catch塊中沒有代碼有效果隱藏錯誤。你想看到錯誤。

有關使用SQL參數的信息,請參閱(例如)Inserting data into a MySQL table using VB.NET,但請使用.Add而不是.AddWithValue - 後者不會按預期工作。

+0

另外'ExecuteScalar'會更好! – shadow

+0

@shadow是的,但有沒有結果被返回的凌亂的潛在問題:[執行標量陷阱錯誤的情況下沒有記錄返回](http://stackoverflow.com/a/13253718/1115360)。 –

+0

來自MSDN返回值 類型:System.Object 結果集中第一行的第一列,或者如果結果集爲空,則爲null引用(在Visual Basic中爲Nothing)。返回最多2033個字符。「所以我不認爲有問題。 – shadow