VB.NET编程语言入门与常见问题

VB.NET编程语言入门指南

语言概述

++Visual Basic.NET是由Visual Basic发展而来,实现了从基于对象编程到完全面向对象的变革,是构建于.NET Framework之上的编程语言,它对原版本进行了一些升级和增强,能提高日常开发效率,且适应其开发环境后,可使用同样工具为其他.NET语言编写程序。++

基础内容

  • 变量与数据类型:变量的声明和使用是编程基础,需选择合适的数据类型。若不提供数据类型,则指定变量为缺省类型。

  • 运算符:用于执行各种运算操作,如算术运算、逻辑运算等。

  • 流程控制 :包括条件语句(如If...Then...Else)和循环语句(如ForWhile),用于控制程序执行流程。

  • 类和对象:作为完全面向对象的语言,类是对象的抽象定义,对象是类的实例,通过类和对象可实现封装、继承和多态等面向对象特性。

  • 事件驱动编程:VB.NET支持事件驱动编程,程序的执行流程由事件触发决定,如按钮点击事件等。

基础语法

  • 变量声明 :使用Dim关键字声明变量,同时可指定数据类型。示例:
vbnet 复制代码
Dim num As Integer
num = 10
  • 数据类型 :包含Integer(整数)、String(字符串)、Boolean(布尔值)等常见类型。

  • 运算符 :有算术运算符(+-*/)、逻辑运算符(AndOrNot)等。

  • 流程控制语句

    • 条件语句If...Then...Else用于条件判断。示例:
vbnet 复制代码
If num > 5 Then
    Console.WriteLine("num大于5")
Else
    Console.WriteLine("num小于等于5")
End If
  • **循环语句**:`For`、`While`等用于循环操作。例如`For`循环:
vbnet 复制代码
For i As Integer = 1 To 5
    Console.WriteLine(i)
Next

示例代码

以下是一个简单的VB.NET控制台程序示例,用于输出"Hello, VB.NET!":

vbnet 复制代码
Module Module1
    Sub Main()
        Console.WriteLine("Hello, VB.NET!")
        Console.ReadLine()
    End Sub
End Module

面向对象编程

  • 类和对象:类是对象的抽象定义,对象是类的实例。示例:
vbnet 复制代码
Public Class Person
    Public Property Name As String
    Public Property Age As Integer

    Public Sub New(name As String, age As Integer)
        Me.Name = name
        Me.Age = age
    End Sub

    Public Sub Introduce()
        Console.WriteLine("我叫 " & Name & ",今年 " & Age & " 岁。")
    End Sub
End Class

Module Module1
    Sub Main()
        Dim p As New Person("张三", 20)
        p.Introduce()
    End Sub
End Module
  • 封装、继承和多态:封装控制类成员的访问;继承使一个类可继承另一个类的属性和方法;多态允许不同类的对象对同一消息有不同响应。

事件驱动编程

VB.NET支持事件驱动编程,程序执行由事件触发。如Windows窗体应用程序中按钮的点击事件:

vbnet 复制代码
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MessageBox.Show("按钮被点击了!")
    End Sub
End Class

常见出错问题

数据库连接与操作出错

在进行数据库操作时,常出现连接或查询语句方面的错误。例如以下代码:

vbnet 复制代码
Dim strcn1 As String = "workstation"
Dim str1 As String = "SELECT a.* ,b.jyrq ,b.qty FROM TTI_LLJYBG b ,tti_lljymx a where a.jydh=b.jydh"
Dim da As New SqlDataAdapter(str1, strcn1)
Dim ds As New DataSet
Dim cmd As New SqlCommand

Private Sub Form1_Load(...)
    da.Fill(ds, System.Data.SqlClient.SqlException) ' 此句易出错
    DataGrid1.DataSource = ds.Tables("tti_lljybg")
End Sub

问题可能出在数据库连接字符串、查询语句或数据库本身。若把查询语句改为简单的select * from tti_lljybg仍出错,且连接本地数据库正常,可能是服务器端数据库存在问题,需检查数据库连接是否正确。

类型转换错误

在处理数据类型转换时会出错。如在Oracle数据库操作中:

vbnet 复制代码
' 当a = cm.ExecuteOracleScalar() 出错:从类型OracleNumber到Integer的转换无效
' 当a=cm.ExecuteScalar()正确通过

++这里使用ExecuteOracleScalar方法返回OracleNumber类型,不能直接转换为Integer类型,而ExecuteScalar方法返回合适类型,避免了转换错误。++

组件使用错误

使用组件(如Word.dll)时会遇到问题。例如:

vbnet 复制代码
Dim wapp As Word.Application = New Word.Application()
Dim adoc As Word.Document = New Word.Document()
' 无法知道adoc 的状态,如打开还是关闭
' 当word文件在外部打开状态时,adoc.open出错,并且引发一系列错误
' 直接在代码中调用 word.dll 还行,可是把它封装到一个类模块中是, 总是出错: "ERROR: 文档对像不是活动文档"

这涉及到组件的状态管理和封装使用时的上下文问题,需正确处理组件的生命周期和状态。

相关推荐
aiyo_2 小时前
深入浅出DOTNET技术原理
.net·.net core
Traced back2 小时前
# Windows窗体 + SQL Server 自动清理功能完整方案优化版
数据库·windows·.net
今晚打老虎z7 小时前
必应壁纸接口
.net
Traced back13 小时前
Windows窗体应用 + SQL Server 自动清理功能方案:按数量与按日期双模式
数据库·windows·c#·.net
1314lay_100715 小时前
.Net 7.0 Core 文件导入接口的实现
visualstudio·c#·.net
贾修行15 小时前
Kestrel:.NET 的高性能 Web 服务器探秘
服务器·前端·kestrel·.net·net core·web-server·asp.net-core
聊聊MES那点事15 小时前
如何在FastReport.NET中自定义就绪报表查看器(Viewer)
.net·报表工具·fastreport
Cincoze-Johnny1 天前
Windows系统-应用问题全面剖析Ⅴ:德承工控机DA-1000在Windows操作系统下[安装.NET Framework]教程
.net
黑夜中的潜行者1 天前
构建高性能 WPF 大图浏览器:TiledViewer 技术解密
性能优化·c#·.net·wpf·图形渲染