Как написать SQL-запросов в текстовый файл c# операции
Я хочу написать sql-запросы в txt-файле c# transaction. Я могу писать sql-запросы в txt-файле в обычной ситуации.
SQL запрос сохранить в txt файл successfullyas в мой собственный класс
string strSql = "вставить в dbo.repayment_collection_master( AccId, productId, mem_code, memberName)значения('1','1','3','Прасанта')
DataAccess.ExecuteNonQuery(strSql); public static void ExecuteNonQuery(String sql) { SqlConnection con = DBConnection.Connection; SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = con; cmd.CommandTimeout = 0; if (con.State != ConnectionState.Open) con.Open(); int i = 0; i= cmd.ExecuteNonQuery(); if (i != 0) { addQueryToDb ad = new addQueryToDb(sql); } con.Close(); }` public addQueryToDb(string str) { string LogFileName = string.Empty; string userName = "work_"; LogFileName = DateTime.Now.Day.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year.ToString(); LogFileName = HttpContext.Current.Server.MapPath("~/userWork\\" + userName + "" + LogFileName + ".txt"); FileStream fs = new FileStream(LogFileName, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(str); m_streamWriter.WriteLine("\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Dispose(); m_streamWriter.Dispose(); }
Но я не могу написать запрос из транзакции C#
command.CommandText = @"insert into dbo.repayment_collection_master( AccId, productId, mem_code, memberName)Values('1','1','3','Prasanta')"; command.ExecuteNonQuery(); command = new SqlCommand("SP_Loan_Repayment", connection, transaction); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add("@branchId", SqlDbType.VarChar).Value = branchId; command.Parameters.Add("@centerId", SqlDbType.VarChar).Value = centerId; command.Parameters.Add("@centerName", SqlDbType.VarChar).Value = centerName; command.Parameters.Add("@repayDate", SqlDbType.VarChar).Value = repayDate; command.Parameters.Add("@repayPrinc", SqlDbType.Decimal).Value = repayPrinc; command.Parameters.Add("@repayInt", SqlDbType.Decimal).Value = repayInt; command.Parameters.Add("@transactionId", SqlDbType.VarChar).Value = transactionId; command.Parameters.Add("@approvedBy", SqlDbType.VarChar).Value = approvedBy; SqlParameter VoucharReset = command.Parameters.Add("@VoucharReset", SqlDbType.Int, 2); VoucharReset.Direction = ParameterDirection.Output; SqlParameter ReturnIndex = command.Parameters.Add("@ReturnIndex", SqlDbType.Int, 2); ReturnIndex.Direction = ParameterDirection.Output; SqlParameter ReturnMsg = command.Parameters.Add("@ReturnMsg", SqlDbType.VarChar, 4000); ReturnMsg.Direction = ParameterDirection.Output; SqlParameter ReturntransactionId = command.Parameters.Add("@ReturntransactionId", SqlDbType.VarChar, 10); ReturntransactionId.Direction = ParameterDirection.Output; command.ExecuteNonQuery(); transaction.Commit(); After transaction.Commit() //I want to write above query to txt file
Что я уже пробовал:
public addQueryToDb(string str) { string LogFileName = string.Empty; string userName = "work_"; LogFileName = DateTime.Now.Day.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year.ToString(); LogFileName = HttpContext.Current.Server.MapPath("~/userWork\\" + userName + "" + LogFileName + ".txt"); FileStream fs = new FileStream(LogFileName, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(str); m_streamWriter.WriteLine("\n"); m_streamWriter.Flush(); m_streamWriter.Close(); fs.Dispose(); m_streamWriter.Dispose(); }
Richard MacCutchan
Вам нужно захватить все детали транзакции и преобразовать их в строку (или несколько строк). Затем, когда вам нужно будет использовать транзакцию позже, вы читаете строку(ы) обратно и преобразуете ее в правильный формат транзакции.
Richard Deeming
NB: Ваш ExecuteNonQuery
метод заставит вас написать код, который уязвим для SQL-инъекция[^].
Вам нужно переписать его так, чтобы вы могли правильно передавать параметры в запрос, а не пытаться объединить значения параметров в самом запросе.