none
[VB2008]使用VB2008連接SQL資料庫 RRS feed

  • 問題

  • 小弟最近嘗試幫公司建立一個ERP系統
    架構是利用VB2008設計一個介面
    讓使用者透過介面去讀取SQL Server的資料
    翻過許多資料
    比較多是在說VB 6.0與SQL的連結
    目前有找到一本「ADO .NET 3.X資料庫程式設計參考手冊」
    是在討論VB 2008連結SQL的
    但一直看不懂如何連結SQL資料庫後
    將資料表的資料顯示在DataGridView中
    請各位大大給點指導
    謝謝!!

        Private Sub vMI_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
    
    
            Dim cnVMSQL As New SqlConnection()
    
            cnVMSQL.ConnectionString = "Data Source=localhost;" & "Initial Catalog=YH_DataBase;" & "User ID=xxxxx;Password=xxxxxxxx;"
    
            cnVMSQL.Open()
    
    
    
            'Dim dtSource As DataTable = cnVMSQL.GetSchema
    
            Dim dS As New DataSet("YH_DataBase")
    
            vL.DataSource = dS
    
            'vL.DataMember = "Vender_Management"
    
    
    
        End Sub
    
    
    在SQL資料庫中
    位置目前先使用我的NB
    資料庫名稱:YH_DataBase
    資料表明稱:dbo.VenderManagement

    開發環境: WIN SP3 + VS 2008 + Framework 3.5
    2009年6月6日 上午 07:34

解答

  • 1.


    先用 TableAdapter 或 DataAdapter 填入資料到 DataSet。
    你直接 new 新的 DataSet 出來,會有資料我隨便你 ...

    2.

    建議你貼你的程式出來前,先把敏感資料 (user id, password) 馬賽克一下,看你也不是新手了,不要連這點資安的警覺性都沒有。
    小人物一枚。
    • 已提議為解答 Lolota Lee 2009年6月8日 上午 02:47
    • 已標示為解答 bauannModerator 2009年6月12日 下午 05:06
    2009年6月6日 上午 07:59
    版主

所有回覆

  • 1.


    先用 TableAdapter 或 DataAdapter 填入資料到 DataSet。
    你直接 new 新的 DataSet 出來,會有資料我隨便你 ...

    2.

    建議你貼你的程式出來前,先把敏感資料 (user id, password) 馬賽克一下,看你也不是新手了,不要連這點資安的警覺性都沒有。
    小人物一枚。
    • 已提議為解答 Lolota Lee 2009年6月8日 上午 02:47
    • 已標示為解答 bauannModerator 2009年6月12日 下午 05:06
    2009年6月6日 上午 07:59
    版主
  • 感謝小朱版主的回答

    另外
    原貼出的敏感資料
    其實都是假的
    因為...能夠登入的資料不是這個
    只是隨便填的...
    不過我還是改掉了...
    謝謝!!
    2009年6月6日 上午 08:03
  • 這種東西還是小心為妙,不要哪天忘了改過就貼上來,被人家利用的話,會怎麼樣我就不說了。
    小人物一枚。
    2009年6月6日 上午 08:16
    版主

  • 謝謝版大的提醒...

    2009年6月6日 上午 08:33
  • 風箏:
        從資料庫用DataAdapter.Fill的方式應該是大概長這樣
                Dim strConn As String
                strConn = 連線字串
                Dim MyConn As SqlConnection
                Dim MyCmd As SqlCommand
                Dim MyDataSet As New DataSet
                Dim SQLStr As String = " Select * from myTable"
                MyConn = New SqlConnection(strConn)
                MyCmd = New SqlCommand(SQLStr, MyConn)
                Dim MyDataAdapter As New SqlDataAdapter(MyCmd)
                MyDataAdapter.Fill(MyDataSet, "myTable")
    • 已提議為解答 Lolota Lee 2009年6月8日 上午 02:47
    2009年6月6日 上午 10:35
    版主
    • 已提議為解答 Lolota Lee 2009年6月8日 上午 02:47
    2009年6月6日 上午 10:38
  • 中間斷了好幾天
    幫老闆處理另外一件事情
    現在有時間回頭來繼續寫ERP系統

    剛剛看過Bill大的提示後
    寫了下面這段code

            Dim myDataSet As New DataSet
            Dim cnVMSQL As New SqlConnection()
            cnVMSQL = New SqlConnection("Data Source=localhost;" & "Initial Catalog=YH_DataBase;" & "User ID=xxxxx;Password=xxxxxxxxxxxxxxxx;")
            cnVMSQL.Open()
            Dim cmdVMSQL As New SqlCommand()
            Dim cmdStr As String = "Select * from Vender_ Management"
            cmdVMSQL = New SqlCommand(cmdStr, cnVMSQL)
            Dim myData As New SqlDataAdapter(cmdVMSQL)
            myData.Fill(myDataSet, "dbo.Vender_ Management")
    
            vL.DataSource = myDataSet
    

    想當然爾...有錯
    但錯誤的訊息卻指出
    "類型 'System.Data.SqlClient.SqlException' 的未處理例外狀況發生於 System.Data.dll"
    "其他資訊: 無效的物件名稱 'Vender_'。"
    反白的位置在"myData.Fill(myDataSet, "dbo.Vender_ Management")"這行

    想請教各位大大
    公司是採用SQL 2008
    在建立資料庫時
    資料表前方會自動加上dbo.
    有就是說我將資料表取名為「Vender_Management」
    則SQL會自動變成「dbo.Vender_Management」
    那麼我是要寫原本取的名字
    還是要把dbo.都寫進去勒??

    2009年6月15日 上午 03:53
  • SQL Server 用戶端元件會自動把資料庫擁有者預設為 dbo。
    不過如果你在 SQL Server 中有建立新的擁有者,且要連到該擁有者的物件,就要明確標示該擁有者名稱。

    ex: SELECT * FROM mydb.Vendor_Management
    小人物一枚。
    2009年6月15日 上午 04:03
    版主
  • 也就是說
    若我新建立一個使用者為"Max"
    則要寫成Max.Vender_Management嚕...
    2009年6月15日 上午 04:11
  • 使用者和擁有者是兩種不同的東西,不要混為一談。

    資料庫擁有者(database owner):資料庫之資料庫管理員角色的成員。資料庫擁有者只有一個。擁有者有這個資料庫中的完整權限,它決定了提供給其他使用者的存取權和功能。
    小人物一枚。
    2009年6月15日 上午 04:19
    版主
  • 喔...瞭解
    我來試試看...
    謝謝版大...
    2009年6月15日 上午 04:25
  • "dbo.Vender_ Management") <==在  _ 和 Management中間多了一空格.
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年6月15日 上午 04:47
    版主
  • Bill大大
    關於多了一個空白的部分
    我是直接從SQL的資料表上copy名稱過來的


    目前我將code改寫如下:

            Dim myDataSet As New DataSet
            Dim cnVMSQL As New SqlConnection()
            cnVMSQL = New SqlConnection("Data Source=localhost;" & "Initial Catalog=YH_DataBase;" & "User ID=xxxxx;Password=xxxxxx;")
            cnVMSQL.Open()
            Dim cmdVMSQL As New SqlCommand()
            Dim cmdStr As String = "Select * from mydb.Vender_Management"
            cmdVMSQL = New SqlCommand(cmdStr, cnVMSQL)
            Dim myData As New SqlDataAdapter(cmdVMSQL)
            myData.Fill(myDataSet, "mydb.Vender_Management")
    
            vL.DataSource = myDataSet

    但錯誤的訊息卻指出
    "類型 'System.Data.SqlClient.SqlException' 的未處理例外狀況發生於 System.Data.dll"
    "其他資訊: 無效的物件名稱 'mydb.Vender_Management'。"
    反白的位置在"myData.Fill(myDataSet, "dbo.Vender_Management")"這行

    2009年6月15日 上午 06:16
  • 之前的錯誤應該是多了一個空白, 不用在另外加mydb

     Dim myDataSet As New DataSet
            Dim cnVMSQL As New SqlConnection()
            cnVMSQL = New SqlConnection("Data Source=localhost;" & "Initial Catalog=YH_DataBase;" & "User ID=xxx;Password=xxx;")
            cnVMSQL.Open()
            Dim cmdVMSQL As New SqlCommand()
            Dim cmdStr As String = "Select * from Vender_Management"
            cmdVMSQL = New SqlCommand(cmdStr, cnVMSQL)
            Dim myData As New SqlDataAdapter(cmdVMSQL)
            myData.Fill(myDataSet, "Vender_Management")

            vL.DataSource = myDataSet


    LOLOTA - 微軟技術支援中心(CSS) - http://blog.lolota.net
    2009年6月15日 上午 06:39
    版主
  • 多個空白??
    可是相對應的在SQL的資料表上名稱也是有一個空白
    難道...SQL不支援帶有空白的名稱嗎??
    2009年6月15日 上午 06:50
  • 如果有空白, 要用[]括住 -> [Vender_ Management]


    微軟技術支援中心(CSS) - http://www.dotblogs.com.tw/lolota/
    2009年6月15日 上午 06:54
  • 喔...
    原來如此
    感謝大大的回答


    麻煩大大在您替小弟解答的回文中
    有一篇有夾帶一些SQL資訊的
    能否把那些資訊給馬賽克調呢??
    雖然那不是登入的資訊
    麻煩大大了...
    謝謝!!
    2009年6月15日 上午 06:56
  • 風箏:
     
        通常出現你這種問題會因為 找不到那個Table
        當你的Table Name 有空白會發生一個狀況
        以你這個Case Dim cmdStr As String = "Select * from Vender_ Management"
        事實上送出去的 Command是  Select * from Vender_ 
        
    所以找不到Table.
        要不就用 [ ] ,不然就把空白去掉

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年6月15日 上午 07:00
    版主

  • 瞭解了

    原來我的電腦把他當成..."Vender_"
    難怪一直沒動作...

    謝謝!!
    2009年6月15日 上午 07:02