我无法将数据从asp.net插入到SQL Server中

时间:2015-02-20 16:40:36

标签: asp.net sql-server

我正在尝试将ASP.net webforms中的数据插入SQL Server但我收到错误

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

我不明白这个错误,请帮我查一下这是什么错误。

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 个答案:

答案 0 :(得分:1)

如果使用字符串连接来构建sql查询,则对sql注入是开放的。而是始终使用sql-parameters。这也解决了其他问题(例如日期转换)。

此外,请勿声明Dim dt As New Date并使用字符串对其进行初始化。我强烈建议您将Option Strict设置为On。这不会解决任何问题,也会导致许多编译器错误。但通过修复它们,您将学习很多关于.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语句确保处置所有非托管资源,即使发生错误也会关闭连接。