【发布时间】:2016-07-18 13:03:11
【问题描述】:
我正在制作一个链接到 Microsoft SQLServer 的项目,用于输入、删除、编辑有关客户和订单的数据。完整的系统可以工作,但是我被建议使用事务而不是常规 SQL 语句来添加/删除/编辑数据等。
问题是,我之前和过去几个小时的研究都没有使用过这些,我什至不知道如何开始使用它们。
谁能告诉我如何把下面的代码变成一个事务?
Public Shared Function SaveNewPerson(ByVal firstName As String, lastName As String, ByVal age As Integer, ByVal postcode As String, m_cn As OleDbConnection)
Dim Dc As New OleDbCommand
Dc.Connection = m_cn
m_cn.Open()
Dc.CommandText = "INSERT INTO tblPerson([firstName], [lastName], [age], [postcode]) VALUES('" & firstName & "', '" & lastName & "', '" & age & "', '" & postcode & "')"
Dc.ExecuteNonQuery()
Dim personID As Integer
Dc.CommandText = "SELECT @@IDENTITY"
Dc.CommandType = CommandType.Text
personID = CType(Dc.ExecuteScalar(), Integer)
m_cn.Close()
End Function
【问题讨论】:
-
在您做任何其他事情之前,您需要阅读、理解并开始使用参数化查询。您的代码对 sql 注入是开放的。您还应该考虑使用 SCOPE_IDENTITY 而不是 @@Identity。希望您被告知的是使用参数化查询。事务本身不执行插入等。
-
您还应该小心
Shared函数,例如SaveNewPerson。如果你在其中使用共享变量,这可能会在多线程系统中搞砸。 -
另一个建议是存储生日而不是年龄。年龄是根据当前现实世界时间计算得出的值,而不是作为事实存储在表中。
-
@AlexB。多线程系统是什么意思?
-
@SeanLange 虽然我个人同意将 SqlClient 与此类程序一起使用更有意义,但我也使用 OleDb,但这只是因为我在大学就是这样教它的,而在我工作的软件公司也在 SqlClient 上使用它。真的很奇怪。
标签: sql sql-server vb.net tsql sqltransaction