多进程同时操作数据库并同时写日志文件,方法中带参数传递
来源:互联网 发布:艾佛森生涯数据 编辑:程序博客网 时间:2024/05/24 04:16
多进程同时操作数据库并同时写日志文件
namespace ThreadConsole{ class Log { public delegate void Delegate_Insert(); private int _TM_NO; public int TM_NO { get { return _TM_NO; } set { _TM_NO = value; } } public Log() { } public Log(int tm_no) { _TM_NO = tm_no; } public void WriteLog() { //lock (this) //{ // StreamWriter sw = File.AppendText("E:\\WebSite\\RMAAUTO\\LOG\\Test.log"); // sw.WriteLine(DateTime.Now.ToString() + " " + Thread.CurrentThread.Name); // sw.Flush(); // sw.Close(); //} } public void WriteLog(string content) { FileStream stream = new FileStream("E:\\WebSite\\RMAAUTO\\LOG\\Test.log", FileMode.Append, FileAccess.Write, FileShare.ReadWrite); StreamWriter sw = new StreamWriter(stream, Encoding.UTF8); sw.WriteLine(DateTime.Now.ToString() + " " + Thread.CurrentThread.Name + " " + content); sw.Flush(); sw.Close(); } public void insert() { string con1 = "Data Source=localhost;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=88888888;Max Pool Size = 51200;"; string con2 = "Data Source=128.45.4.91;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=123456;Max Pool Size = 51200;"; using (SqlConnection cn = new SqlConnection(con2)) { cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; string sql = ""; for (int i = 0; i < 10; i++) { sql += "INSERT INTO dbo.Thread( ThreadName ,InsertTime ,UpdateTime ,Remark)VALUES ('" + Thread.CurrentThread.Name + "',GETDATE() ,GETDATE() ,'');"; } cmd.CommandText = sql; cmd.ExecuteNonQuery(); cn.Close(); } } public void insertReturnID() { int ID = 0; string con2 = "Data Source=128.45.4.91;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=123456;Max Pool Size = 51200;"; for (int i = 0; i < 1; i++) { using (SqlConnection cn = new SqlConnection(con2)) { cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; string sql = "INSERT INTO dbo.Thread( ThreadName ,InsertTime ,UpdateTime ,Remark)VALUES ('" + Thread.CurrentThread.Name + "',GETDATE() ,GETDATE() ,'') Select @@IDENTITY;"; cmd.CommandText = sql; object O = cmd.ExecuteScalar(); if (!string.IsNullOrEmpty(O.ToString())) ID = int.Parse(O.ToString()); cn.Close(); } WriteLog(ID.ToString()); } } public void insertReturnID2() { lock (this) { int order_ID = 0; string con2 = "server=128.45.4.34;database=RMA0130;uid=sa;pwd=23WSXCDE#@"; try { using (SqlConnection cn = new SqlConnection(con2)) { if (cn.State == ConnectionState.Closed) cn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandText = "EXEC Pro_Thread @TM_No=" + _TM_NO; object O = cmd.ExecuteScalar(); WriteLog("得到result=" + O.ToString()); if (!string.IsNullOrEmpty(O.ToString())) order_ID = int.Parse(O.ToString()); if (cn.State == ConnectionState.Open) cn.Close(); } WriteLog("得到OrderID=" + order_ID.ToString()); WriteLog("执行sql=" + "EXEC Pro_Thread @TM_No=" + _TM_NO); } catch (Exception err) { WriteLog("3:Failed: " + err.Message + ";\t"); } } } public void Delegate_Insert_Fun() { } } class GetDataFromDB { static void Main(string[] args) { //Log L = new Log(); //L.WriteLog(); //for (int i = 0; i < 10; i++) //{ // //Thread T = new Thread(new ThreadStart(L.WriteLog)); // Thread T = new Thread(new ThreadStart(L.insertReturnID2)); // T.Name = "第" + (i + 1).ToString() + "个线程"; // T.Start(); //} //L.WriteLog(); for (int TM_NO = 3466; TM_NO < 3480; TM_NO++) { Log L = new Log(TM_NO); Thread T = new Thread(new ThreadStart(L.insertReturnID2)); T.Name = TM_NO.ToString(); T.Start(); } } } public class OrderBuy { public string FileName { get; set; } public string TM_Name { get; set; } public DateTime UploadTime { get; set; } public int UploadUserID { get; set; } public string SourceType { get; set; } public string SeasonOfTM { get; set; } public string OrderType { get; set; } public int TM_NO { get; set; } public string Remark { get; set; } public string TM_CHANNEL { get; set; } public string Region { get; set; } public int MileStoneID { get; set; } }}