我正在尝试显示来自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
编辑:改进格式
答案 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
最后,这是一个考虑你可以根据需要进行调整的模式。