从sqlserver数据库中选择数据并在datagridview代码中显示它无法正常工作

时间:2018-03-29 18:23:24

标签: vb.net

我正在尝试显示来自sql数据库的数据并将其显示在datagrideview中,但此代码不显示表中的列值。连接正常,连接字符串正常工作。它不会显示任何错误但它不起作用。下面是我正在使用的代码。

Private Sub TabPage4_load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim query As String = " SELECT prodt.Name, Types.Type, Types.Kg, Types.Length, Types.Width, Types.Hight, Types.Area FROM prodt,Types WHERE prodt.ProductID=Types.ProductID"
    Dim cm As New SqlCommand(query, conn)
    Dim adapt As New SqlDataAdapter(cm)
    adapt.Fill(table)
    DataGridView1.DataSource = table
End Sub

编辑:改进格式

4 个答案:

答案 0 :(得分:1)

我暂时没有使用过网络表单,但我很确定你需要在设置数据源后调用Datagridview.DataBind方法。

答案 1 :(得分:0)

试试这个......你应该使用数据集

Private Sub TabPage4_load(sender As Object, e As EventArgs) Handles MyBase.Load
 Dim query As String = " SELECT prodt.Name, Types.Type, Types.Kg, Types.Length, Types.Width, Types.Hight, Types.Area FROM prodt,Types WHERE prodt.ProductID=Types.ProductID"
Dim adapt As New SqlDataAdapter(query , conn)
Dim ds = new dataset
adapt.Fill(ds," prodt ")
DataGridView1.DataSource = ds.Tables (0)
End Sub

我希望它有效

答案 2 :(得分:0)

尝试更现代的连接语法

SELECT 
prodt.Name, Types.Type, Types.Kg, Types.Length, Types.Width, Types.Hight, Types.Area 
FROM prodt 
INNER JOIN Types 
ON prodt.ProductID = Types.ProductID;

如果这不起作用,请尝试在问题中添加SQL标记。

答案 3 :(得分:0)

一个想法是首先在代码之外编写SQL语句。可以在SQL-Server Management Studio中完成以下操作,也可以在项目中创建新的文本文件,例如: test.sql,在此文件中与编辑器连接到服务器,编写SQL,运行它,验证它的工作原理,然后将其放入代码中。

这将是测试SQL(我在SQL-Server Management Studio中使用Microsoft NorthWind数据库中的Product表进行了此操作,添加了类型表。

SELECT  P.ProductID ,
        P.ProductName ,
        T.Hight ,
        T.Width ,
        T.[Length] ,
        T.Area ,
        T.[Type] ,
        T.kg ,
        T.id
FROM    Products AS P
        INNER JOIN [types] AS T ON P.ProductID = T.ProductID;

创建了一个基础连接类(取自另一个项目。

Public Class BaseSqlServerConnection
    Protected DatabaseServer As String = "KARENS-PC"
    Protected DefaultCatalog As String = "NorthWindAzure"
    Public ReadOnly Property ConnectionString() As String
        Get
            Return $"Data Source={DatabaseServer};" & 
                   "Initial Catalog={DefaultCatalog};Integrated Security=True"
        End Get
    End Property

End Class

创建了一个简单的数据类

Imports System.Data.SqlClient
Public Class DataOperations
    Inherits BaseSqlServerConnection

    public Function Read As DataTable
        Dim dt As New DataTable

        Dim selectStatements As String =
                <SQL>
                SELECT  P.ProductID ,
                        P.ProductName ,
                        T.Hight ,
                        T.Width ,
                        T.[Length] ,
                        T.Area ,
                        T.[Type] ,
                        T.kg ,
                        T.id
                FROM    Products AS P
                        INNER JOIN [types] AS T ON P.ProductID = T.ProductID;
                </SQL>.Value

        Using cn As New SqlConnection With 
            {
                .ConnectionString = ConnectionString
            }
            Using cmd As New SqlCommand With 
                {
                    .Connection = cn, 
                    .CommandText = selectStatements
                }
                cn.Open()

                dt.Load(cmd.ExecuteReader())
                dt.Columns("ProductID").ColumnMapping = MappingType.Hidden
                dt.Columns("ID").ColumnMapping = MappingType.Hidden
            End Using
        End Using

        Return dt

    End Function

End Class

请注意使用XML Literal定义命令text / SQL语句。另请注意,我包含主键并通过ColumnMapping隐藏它们。

表格代码

Public Class Form1
    Private _bsData As new BindingSource
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim ops as New DataOperations
        _bsData.DataSource = ops.Read()
        DataGridView1.DataSource = _bsData
    End Sub
End Class

最后,这是一个考虑你可以根据需要进行调整的模式。