2014-01-06 35 views
0

我幾年沒有做過任何嚴肅的編程,而且我也沒有太多間接操縱SQL數據的經驗,但我正在嘗試爲我的僱主創建一個程序並陷入混亂。這裏和我的大學書籍中的許多答案都很有幫助,但是當我認爲自己明白髮生了什麼時,我又會迷失方向,通常是因爲人們使用相同的變量和列名,使得很難弄清楚發生了什麼哪裏。VB.Net和SQL通訊

假設我在SQL服務器localhost上有一個名爲Attendance的數據庫。裏面是一張名爲員工的表格,它由以下列組成:employee_idname_last,name_firstpoints。前三個是varchar,最後一個是decimal(2,1)。使用Visual Studio for Visual Basic,我創建了一個包含多個文本框的程序。用戶輸入的員工編號爲var_empid,當他們按下按鈕時,該編號變爲加載

如何我會繼續使程序執行一個SQL查詢其拉從表中name_last和name_first其中employee_id由用戶var_empid匹配作爲輸入,並把這些數據爲var_last_namevar_first_name變量?

其次,如果用戶進入,成爲var_empidvar_last_namevar_first_name然後點擊添加員工按鈕,我想我怎麼繼續讓用戶添加的信息寫入到SQL表中的其他文本框信息?

爲了澄清,在文本框和變量之間移動數據不是問題。我可以整天這樣做。它正在移動VB和SQL之間的變量,這導致了我的問題。我意識到這是基本的東西,但任何幫助將是偉大的。

+1

微軟和其他人在這種事情上有許多*許多*教程網站。說他們「*使用相同的變量和列名」*並不能解釋你爲什麼不能閱讀和應用它們。請指出您已經閱讀並且無法弄清楚的部分內容。 – RBarryYoung

回答

1

這比你的要求更多,因爲我想你推入,同時一些好的做法:

Public Class Employee 
    Public Property ID As String 
    Public Property Points As Double 'why is this a decimal(2,1)? 
    Public Property LastName As String 
    Public Property FirstName As String 

    Public Shared Function FromDataRow(ByVal data As IDataRecord) As Employee 
     Dim result As New Employee() 
     result.ID = CDbl(data("ID")) 
     result.LastName = CStr(data("LastName")) 
     result.FirstName = CStr(data("FirstName")) 
     Return result 
    End Function 
End Class 

Public Module DataLayer 
    'Check www.connectionstring.com for more info on connection strings 
    Private Property ConnectionString As String = "database connection string here" 

    Private Iterator Function GetRecords(ByVal sql As String, ByVal addParams As Action(Of SqlParameterCollection)) As IEnumerable(Of IDataRecord) 
     Using cn As New SqlConnection(ConnectionString), _ 
       cmd As New SqlCommand(sql, cn) 

      addParams(cmd.Parameters) 
      cn.Open() 
      Using rdr As SqlDataReader = cmd.ExecuteReader() 
       While rdr.Read) 
        Yield Return rdr 
       End While 
      End Using 
     End Using 
    End Function 

    Private Function GetRecords(Of T)(ByVal sql As String, ByVal addParams As Action(Of SqlParameterCollection), ByVal translate As Function(Of IDataRecord, T)) As IEnumerable(Of T) 
     Return GetRecords(sql, addParams).Select(translate) 
    End Function 

    Public Function GetEmployeeData(ByVal EmployeeID As String) As Employee 
     Dim sql As String = _ 
     "SELECT employee_id, name_last, name_first " & _ 
     "FROM employees " & _ 
     "WHERE employee_id= @ID" 

     Return GetRecords(sql, _ 
      Sub(p) p.Add("@ID", SqlDbType.NVarChar, 10).Value = EmployeeID, _ 
      Employee.FromDataRow).First() 
    End Function 
End Class 
+0

這是一個小數,因爲遲到的結果只有半分。 – user3164019

+0

使用員工作爲一個類,並使用對象屬性,而不是變量...這真棒。我希望這些經驗中有一個是有經驗的。感謝大家的幫助。我會繼續學習和做。 – user3164019

+0

小數點(2,1)的最大值爲9.9。是對的嗎?這聽起來像你可能想要一個小數(3,1),其最大值爲99.9。 –

1

要回答你的第二個請求,請執行以下查詢:

Dim Query = "INSERT INTO Attendance (name_first, name_last, points) VALUES(var_first_name, var_last_name, var_points)" 

注意,我沒有插入var_empid因爲如果你已經正確地創建了表,這個ID應該是自動增加自身自動生成主鍵。

1

起步並不容易,因爲起初你會看到如此多的不同名稱和技術,它們似乎都承諾,或多或少都是一樣的。特別是如果你想建立一個數據庫連接的應用程序,並開始執行諸如CRUD操作(插入,更新,刪除等)的基本內容,很容易混淆。

從這裏開始閱讀關於ADO.NET Architecture。您希望瞭解更多關於DataSetLinq To SQLEntity Framework的內容,但可能並不多。這就是爲什麼我強烈建議花幾天時間慢慢觀看Beth Massi在VB.Net和Data上的教程視頻。

在這個頁面上,你會發現很多有用的信息來開始構建簡單但非常有效的應用程序和數據庫。 確保了數據視頻系列,的Visual Basic 2008年在表單數據的視頻(使用DataSets)觀看窗體,然後語言集成查詢(LINQ)系列(使用LINQ To SQL,你就會明白爲什麼在你的VB。 net應用程序中,您的對象變量與您的數據庫列具有相同的名稱)。最後,您可以看看Entity Framework教程(您會發現與Linq To SQL非常相似)。

完成這些基本教程後,您將能夠選擇您的路徑並開始編程。一旦你掌握了基本概念,搜索和理解你在互聯網上找到的東西就容易多了。