【问题标题】:how to save date from visual basic.net to sql server如何将日期从visual basic.net保存到sql server
【发布时间】:2023-03-30 14:12:01
【问题描述】:

大家好,我是 vb.net 的初学者,正在尝试为我的视频制作应用程序

我在将演员的生日插入 sql server 数据库时遇到问题

sql server 中的生日字段设置为日期而不是日期时间

假设生日 = 02-13-1980 当我点击保存按钮时出现错误

“02-13-1980”附近的语法不正确

感谢您的帮助

这是我的课

Imports System.Data.Sql
Imports System.Data.SqlClient

Public Class SQL_Control

Public SQLCon As New SqlConnection With {.ConnectionString = "Server=TRUCK-PC\TRUCK;Database=Videos;User=sa;Pwd=123456;"}
Public SQLCmd As SqlCommand
Public SQLDA As SqlDataAdapter
Public SQLDataset As DataSet


Public Function HasConnection() As Boolean

    Try

        SQLCon.Open()

        SQLCon.Close()
        Return True

    Catch ex As Exception

        MsgBox(ex.Message)
        Return False
    End Try

End Function

Public Sub RunQuery(Query As String)

    Try

        SQLCon.Open()

        SQLCmd = New SqlCommand(Query, SQLCon)

        SQLDA = New SqlDataAdapter(SQLCmd)
        SQLDataset = New DataSet
        SQLDA.Fill(SQLDataset)

        SQLCon.Close()

    Catch ex As Exception

        MsgBox(ex.Message)

        If SQLCon.State = ConnectionState.Open Then

            SQLCon.Close()

        End If

    End Try

End Sub


Public Sub AddNewActor(S_ActorName As String, S_ActorNationality As String, S_ActorBirthDate As Date)

    Try
        Dim strInsert As String = "INSERT INTO Videos (Actor_Name,Actor_Nationality,Actor_Birth_Date) " & _
                                         "VALUES (" & _
                                         "'" & S_ActorName & "'," & _
                                         "'" & S_ActorNationality & "'," & _
                                         "'" & S_ActorBirthDate & "'"

        MsgBox(strInsert)

        SQLCon.Open()
        SQLCmd = New SqlCommand(strInsert, SQLCon)

        SQLCmd.ExecuteNonQuery()

        SQLCon.Close()

    Catch ex As Exception

        MsgBox(ex.Message)

    End Try

End Sub
End Class

这是我的表单代码

Imports System.Data.SqlClient

Public Class F2_Actors

Dim SQL As New SQL_Control

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    SQL.RunQuery("SELECT * FROM tbl_actors WHERE tbl_actors.Actor_Name = '" & ActorName.Text & "' ")

    If SQL.SQLDataset.Tables(0).Rows.Count > 0 Then

        MsgBox("Actor already exist", MsgBoxStyle.Critical, "Videos Database - Adding New Actor")

    Else

        AddActor()

    End If
End Sub

Public Sub AddActor()

    SQL.AddNewActor(ActorName.Text, ActorNationality.Text, ActorBirthDate.Text)

End Sub
End Class

【问题讨论】:

  • 发布您遇到问题的代码 sn-p。根据错误消息,INSERT 似乎有语法错误,也没有参数化。始终使用参数化查询。
  • Dan guzman 我把代码 sn-p 你能帮我解决这个问题吗?我发现添加参数有困难,因为我在一个类中添加了代码,然后我以指定的形式调用它

标签: sql-server vb.net


【解决方案1】:

SQL 语法错误的原因是VALUES 子句末尾缺少右括号。

正如我在评论中提到的,对于在运行时变化的值,一次应该始终使用参数化查询。这种做法提供了安全性、性能和可读性的好处。下面是使用强类型参数的参数化版本。更改参数数据类型和最大字符长度以匹配您的实际表架构。

请注意,我还对表名进行了模式限定,这是提高性能并避免歧义的另一个最佳实践。我还添加了一个分号语句终止符,因为在 SQL Server 中不推荐使用终止符。

Public Sub AddNewActor(S_ActorName As String, S_ActorNationality As String, S_ActorBirthDate As Date)

    Try

        Dim strInsert As String = "INSERT INTO dbo.Videos (Actor_Name,Actor_Nationality,Actor_Birth_Date) " & _
                             "VALUES (@Actor_Name, @Actor_Nationality, @Actor_Birth_Date);"

        SQLCon.Open()
        SQLCmd = New SqlCommand(strInsert, SQLCon)
        SQLCmd.Parameters.Add("@Actor_Name", SqlDbType.VarChar, 30).Value = S_ActorName
        SQLCmd.Parameters.Add("@Actor_Nationality", SqlDbType.VarChar, 30).Value = S_ActorNationality
        SQLCmd.Parameters.Add("@Actor_Birth_Date", SqlDbType.Date).Value = S_ActorBirthDate

        SQLCmd.ExecuteNonQuery()

        SQLCon.Close()

    Catch ex As Exception

        MsgBox(ex.Message)

    End Try

End Sub

另外,避免在查询中使用SELECT *,而是指定一个明确的列列表。这种做法可以提高性能并提供更干净的数据库界面。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多