我想从C#执行一个.sql脚本.基本上脚本将一行插入到几个不同的表中.
关键是我有C#代码中需要传递给.SQL查询的值.这些值将在程序执行期间收集.
INSERT INTO [DB].[dbo].[User] ([Id],[AccountId],[FirstName],[LastName],[JobTitle],[PhoneNumber] ) VALUES ('00A640BD-1A0D-499D-9155-BA2B626D7B68','DCBA241B-2B06-48D7-9AC1-6E277FBB1C2A','Mark','Wahlberg','Actor','9889898989']) GO
这些值将不时变化,即它们被捕获在C#代码中,需要传递.
任何人都可以帮助我这样做.我正在学习C#和sql.非常感谢.
解决方法
您可以在这里打开自己的高达
SQL injection attacks,所以最好的做法是使用参数:
using (sqlConnection dbConn = new sqlConnection(connectionString)) { dbConn.Open(); using (sqlTransaction dbTrans = dbConn.BeginTransaction()) { try { using (sqlCommand dbCommand = new sqlCommand("insert into [DB].[dbo].[User] ( [Id],[PhoneNumber] ) values ( @id,@accountid,@firstname,@lastname,@jobtitle,@phonenumber );",dbConn)) { dbCommand.Transaction = dbTrans; dbCommand.Parameters.Add("id",sqlType.VarChar).Value = id; dbCommand.Parameters.Add("accountid",sqlType.VarChar).Value = accountId; dbCommand.Parameters.Add("firstname",sqlType.VarChar).Value = firstName; dbCommand.Parameters.Add("lastname",sqlType.VarChar).Value = lastName; dbCommand.Parameters.Add("jobtitle",sqlType.VarChar).Value = jobTitle; dbCommand.Parameters.Add("phonenumber",sqlType.VarChar).Value = phoneNumber; dbCommand.ExecuteNonQuery(); } dbTrans.Commit(); } catch (sqlException) { dbTrans.Rollback(); throw; // bubble up the exception and preserve the stack trace } } dbConn.Close(); }
编辑 – 作为一个额外的信息,我添加了一个transaction,所以如果sql命令失败它将回滚.