我不能将 asp.net 中的数据插入到 SQL 服务器

标签: Asp.net SQLServer
发布时间: 2017/3/26 5:41:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图从 ASP.net webforms 的数据插入到 SQL Server,但生成的错误信息

Varchar 数据类型为 datetime 数据类型转换导致外的范围值。

我不明白此错误,请帮我找出什么是什么是此错误。

Protected Sub Myinsert_Click(sender As Object, e As EventArgs) Handles Myinsert.Click
    Dim dt As New Date
    dt = DateAndTime.Now.ToString
    p = "Image/" + ImgPath.FileName.ToString
    Try
        cn.Open()
        cmd.Connection = cn
        cmd.CommandText = "INSERT INTO MyWebSite( img, type, title, short_para, full_para, datepost) VALUES('" & p & "','" & txtType.Text & "','" & txtTitle.Text & "','" & ParaTT.Text & "','" & Para.Text & "','" & dt & "')"

        cmd.ExecuteNonQuery()
        cn.Close()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

End Sub

解决方法 1:

如果你使用字符串连接来生成 sql 查询,你就打开 sql 注入。相反,总是使用 sql 参数。这也可以修复其他问题 (远东财务日期转换)。

此外,不要宣布 Dim dt As New Date 和一个字符串来初始化它。我强烈推荐设置 Option StrictOn 。这并不能解决任何事情,也会导致很多编译器错误。但是,解决他们的你会学到许多关于.NET 类型系统,您将学习如何编写安全的代码,不依赖于隐式转换 (或易受不受欢迎的转换)。

Protected Sub Myinsert_Click(sender As Object, e As EventArgs) Handles Myinsert.Click
    Try
        Using cn = New SqlConnection("Connection String")
            Dim insertSQL = "INSERT INTO MyWebSite(img, type, title, short_para, full_para, datepost) VALUES(@img, @type, @title, @short_para, @full_para, @datepost)"
            Using cmd = New SqlCommand(insertSQL, cn)
                cmd.Parameters.Add(New SqlParameter("@img", SqlDbType.VarChar))
                cmd.Parameters(cmd.Parameters.Count - 1).Value = "Image/" + ImgPath.FileName.ToString()
                cmd.Parameters.Add(New SqlParameter("@type", SqlDbType.VarChar))
                cmd.Parameters(cmd.Parameters.Count - 1).Value = "your type"
                ' ....... other parameters .....
                cmd.Parameters.Add(New SqlParameter("@datepost", SqlDbType.DateTime))
                cmd.Parameters(cmd.Parameters.Count - 1).Value = Date.Now

                cn.Open()
                Dim inserted As Int32 = cmd.ExecuteNonQuery()
            End Using ' no need to close the connection due to the using
        End Using
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

请注意,我使用 Using 语句来确保所有非托管的资源进行配置和连接获取关闭甚至上错误。

赞助商