0

我必须通过 VS 2008 在我的 SQL Server 中插入一行,我的代码如下;

conn = New SqlConnection
            conn.ConnectionString = String.Format("Data Source={0}; Integrated Security=True; Database={1};", Datasource, Database)

 sqlcmd = conn.CreateCommand()
            sqlcmd.CommandText = String.Format("Insert into WWF_Test (Name, Address, Quantity, CreditCardNo, LogMsg, Date_Time) values ({0}, {1}, {2}, {3}, {4}, {5})", _
                                               CustomerName, CustomerAdd, Quantity, CreditCardNum, Now, message)

            Using conn
                conn.Open()
                sqlcmd.ExecuteNonQuery()
                conn.Close()
            End Using

在运行时,我遇到了 Date_Time 列(SQL Server 中的 datetime 类型)的异常,其中时间部分引发了错误。喜欢;

{"Incorrect syntax near '10'."} --> where Now = 11/11/2013 10:50:24

我错过了转换吗?考虑到我需要一个日期时间,我认为它应该接受它。任何帮助请。

4

1 回答 1

1

不要使用string.Format将参数放入您的 SQL 开始。

相反,使用参数化 SQL,并指定这些参数的值。这将避免SQL 注入攻击,并有助于避免不必要的和有问题的字符串转换。

所以你想要这样的东西:

sqlcmd.CommandText = "Insert into WWF_Test (Name, Address, Quantity, CreditCardNo, LogMsg, Date_Time) values (@Name, @Address, @Quantity, @CreditCardNo, @LogMsg, @Date_Time)"

sqlcmd.Parameters.Add("@Name", SqlDbTypes.NVarChar).Value = CustomerName
sqlcmd.Parameters.Add("@Address", SqlDbTypes.NVarChar).Value = CustomerAdd
etc

...SqlDbTypes.DateTime在适当的地方使用。这样,您就不必担心DateTime值将如何在 SQL 中表示,因为它不在SQL 中。驱动程序可能会将其转换为文本以便传递,但即使这样做也意味着驱动程序有责任将其正确处理。无论如何,它更有可能使用二进制表示。

于 2013-11-11T06:57:25.993 回答