In MSSQL Server, I have a database with a name TestDBthat contains one table with three columns (Id, FirstName, LastName) with a name TestTable. To insert strings in TestTable, I declared type
type Person = { Id:int; FirstName:string; LastName:string }
two methods 1) Parameters and 2) Transaction
let Parameters(person:Person) =
[|
SqlParameter("@Id", person.Id)
SqlParameter("@FirstName", person.FirstName)
SqlParameter("@LastName", person.LastName)
|]
let Transaction(tsql, sqlcon, sqltran, sqlparam) =
let cmd = new SqlCommand(tsql, sqlcon, sqltran);
for p in sqlparam do
cmd.Parameters.Add(p) |> ignore
cmd
in the main method of my console application I used type and methods in this way
let population = [{Person.Id = 1; Person.FirstName = "Emon1"; Person.LastName = "Haque1"}
{Person.Id = 2; Person.FirstName = "Emon2"; Person.LastName = "Haque2"}]
let query = @"INSERT INTO TestTable VALUES(@Id, @FirstName, @LastName)"
let conStr = @"server=EMON; database=TestDB; user=TestUser; password=TestPass"
use con = new SqlConnection(conStr)
con.Open()
let trans = con.BeginTransaction()
try
population
|> List.iter(fun x -> Transaction(query, con, trans, Parameters(x)).ExecuteNonQuery() |> ignore)
|> trans.Commit
with
| exn -> trans.Rollback()
I used useonce for SqlConnectionin the main method.
Should I use it for SqlCommandin the function Transaction, con.BeginTransaction()and in case of a transaction call, when it returns SqlCommandin the main method or use contakes care of all?
source
share