本文实例讲述了asp.net基于windows服务实现定时发送邮件的方法。分享给大家供大家参考,具体如下:
//定义组件 private System.Timers.Timer time; public int nowhour; public int minutes; public string sendTime; public Thread th; public string isOpen;//是否启用定时发送 public string strToEUser; public static int index = -1; public static ArrayList mulitaddress; //服务开始 protected override void OnStart(string[] args) { time = new System.Timers.Timer(); time.Enabled = true; time.AutoReset = true; //定时执行方法 time.Elapsed+=new System.Timers.ElapsedEventHandler(time_Elapsed); UserEmail toUser =new UserEmail(); mulitaddress = GetMailAdressName(); // LogHelper.SaveNote(\"当前索引的值\" + index.ToString()); Thread.Sleep(2000); time.Start(); } public class LogHelper { public static void SaveNote(string note) { FileStream stream = new FileStream(GetLogDirectory(\"Common\") + DateTime.Now.ToString(\"yyyy-MM-dd\") + \".txt\", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite); StreamWriter writer = new StreamWriter(stream, Encoding.UTF8); writer.WriteLine(\"================================================================\"); writer.WriteLine(string.Format(\"Note:/t{0}\", note)); writer.WriteLine(string.Format(\"DateTime:/t{0}/r/n/r/n\",DateTime.Now.ToString())); stream.Flush(); writer.Close(); stream.Close(); stream.Dispose(); writer.Dispose(); } public static void SaveNote(string note, string txtname) { FileStream stream = new FileStream(GetLogDirectory(txtname) + DateTime.Now.ToString(\"yyyy-MM-dd\") + \".txt\", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite); StreamWriter writer = new StreamWriter(stream, Encoding.GetEncoding(\"gb2312\")); writer.WriteLine(\"================================================================\"); writer.WriteLine(string.Format(\"Note:/t{0}\", note)); writer.WriteLine(string.Format(\"DateTime:/t{0}/r/n/r/n\", DateTime.Now.ToString(\"yyyyMMddHHmmss\"))); stream.Flush(); writer.Close(); stream.Close(); stream.Dispose(); writer.Dispose(); } public static void SaveException(Exception e) { SaveException(e, string.Empty); } public static void SaveException(Exception e, string memo) { FileStream stream = new FileStream(GetLogDirectory(\"Common\") + DateTime.Now.ToString(\"yyyy-MM-dd\") + \".txt\", FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite); StreamWriter writer = new StreamWriter(stream); writer.WriteLine(\"================================================================\"); writer.WriteLine(string.Format(\"Memo:/t{0}\", memo)); writer.WriteLine(string.Format(\"DateTime:/t{0}\", DateTime.Now.ToShortTimeString())); writer.WriteLine(string.Format(\"Message:/t{0}\", e.Message)); writer.WriteLine(string.Format(\"StackTrace:/r/n----------/r/n{0}/r/n----------/r/n/r/n/r/n\", e.StackTrace)); stream.Flush(); writer.Close(); stream.Close(); stream.Dispose(); writer.Dispose(); } public static string GetLogDirectory(string category) { string baseDirectory = string.Empty; if ((HttpContext.Current != null) && (HttpContext.Current.Server != null)) { baseDirectory = HttpContext.Current.Server.MapPath(\"~\"); } else { baseDirectory = AppDomain.CurrentDomain.BaseDirectory; } if ((baseDirectory[baseDirectory.Length - 1] != \'/\') && (baseDirectory[baseDirectory.Length - 1] != \'//\')) { baseDirectory = baseDirectory + @\"/\"; } baseDirectory = string.Format(@\"{0}Log/{1}/\", baseDirectory, category); if (!Directory.Exists(baseDirectory)) { Directory.CreateDirectory(baseDirectory); } return baseDirectory; } } void time_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { try { if (mulitaddress != null) { LogHelper.SaveNote(\"进入time_Elapsed\"); //获取定时发送时间 sendTime = Convert.ToString(GetConfigValue(\"sendTime\")); LogHelper.SaveNote(\"sendTime\" + sendTime); //是否开启定时发送功能 isOpen = GetConfigValue(\"isOpen\"); int sleeptime = Convert.ToInt32(GetConfigValue(\"SleepTime\")); int stoptime = Convert.ToInt32(GetConfigValue(\"stoptime\")); //LogHelper.SaveNote(\"数组长度\" + mulitaddress.Count); // LogHelper.SaveNote(\"是否开启定时发送功能\" + isOpen + \"定时时间\" + sendTime + \"定时小时数:\" + Convert.ToInt32(sendTime.Split(new char[] { \':\' })[0]) + \"定时分钟数:\" + Convert.ToInt32(sendTime.Split(new char[] { \':\' })[1])); if (isOpen == \"true\") { //现在时间 小时 nowhour = Convert.ToInt32(DateTime.Now.Hour.ToString());//10 //现在分钟 minutes = Convert.ToInt32(DateTime.Now.Minute.ToString());//5 //获取发送小时 int sendhour = Convert.ToInt32(sendTime.Split(new char[] { \':\' })[0]); //获取发送的分钟 int sendMinute = Convert.ToInt32(sendTime.Split(new char[] { \':\' })[1]); LogHelper.SaveNote(\"进入定时发送邮件服务! 定时小时为:\" + sendhour.ToString() + \"定时分钟为:\" + sendMinute.ToString() + \"现在小时为:\" + nowhour.ToString() + \"现在定时的分钟为:\" + minutes.ToString()); LogHelper.SaveNote(\"当前索引的值\" + index.ToString()); if (nowhour == stoptime) { LogHelper.SaveNote(\"停止时间点到了 邮件停止发送 !!!\"); index = -1; } else { //如果和当前的时间 小时相等 则定时发送邮件 if ((Convert.ToDateTime(DateTime.Now.ToShortTimeString()) >= Convert.ToDateTime(sendTime)) && index < mulitaddress.Count) { index++; if (index < mulitaddress.Count) { SendEmail(((UserEmail)mulitaddress[index])); } else { LogHelper.SaveNote(\"发送完毕 当前的索引值为\" + index.ToString()); } } } } else { //LogHelper.SaveNote(\"当前索引的值\" + index.ToString()); index++; if (index < mulitaddress.Count) { SendEmail(((UserEmail)mulitaddress[index])); } else { LogHelper.SaveNote(\"发送完毕 时间停止\"); time.Enabled = false; time.Stop(); } } Thread.Sleep(sleeptime); } else LogHelper.SaveNote(\"mulitaddress=null\"); } catch (Exception ex) { LogHelper.SaveNote(ex.ToString()); } } public ArrayList GetMailAdressName() { ArrayList list = new ArrayList(); string strSQL = \"select b.mailAddress, a.mailtemplate,a.title from tg_product as a inner join tg_mailOrder as b on a.ccode=b.ccode where a.createtime=(select max(createtime) from tg_product)\"; SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.Text, strSQL, null); if (dr.HasRows) { while (dr.Read()) { UserEmail email = new UserEmail(); email.Mailaddres = dr[\"mailAddress\"].ToString(); email.Title = dr[\"title\"].ToString(); email.Contents = dr[\"mailtemplate\"].ToString(); list.Add(email); } } return list; } /// <summary> /// 定义用户邮件 标题 内容 Email地址 /// </summary> public class UserEmail { private string title; private string contents; public string Contents { get { return contents; } set { contents = value; } } private string mailaddres; public string Mailaddres { get { return mailaddres; } set { mailaddres = value; } } public string Title { get{return title;} set { title = value; } } } #region 发送邮件 /// <summary> /// 发送邮件 /// </summary> public void SendEmail(UserEmail user) { try { LogHelper.SaveNote(\"进入SendEmail!!!\"); //邮件服务器 string smtpserver = GetConfigValue(\"smtpserver\"); //发件人的邮箱名称 string emailuserName = GetConfigValue(\"emailuserName\"); //发件人的邮箱密码 string emailuserpwd = GetConfigValue(\"emailuserpwd\"); //邮箱地址 string emailfrom = GetConfigValue(\"emailfrom\"); int port = Convert.ToInt32(GetConfigValue(\"serverPort\")); bool f = true; //是否经过SSL加密 string isSSL = GetConfigValue(\"SSL\"); if (isSSL == \"true\") { f = true; } else { f = false; } LogHelper.SaveNote(\"发件人的邮箱名称\" + emailuserName + \"邮件地址(emailFrom)\" + emailfrom + \"收件人\" + user.Mailaddres); SendEmailToUser(smtpserver, port, f, user.Mailaddres, null, emailuserName, emailuserpwd, emailfrom, user.Title,user.Contents); LogHelper.SaveNote(\"Send Mail Success\"); } //获取异常信息 catch (Exception error) { //写入异常信息 using (StreamWriter sw = new StreamWriter(\"F://MailErrorlog.txt\", true, System.Text.Encoding.UTF8)) { sw.WriteLine(DateTime.Now.ToString() + \":\"); sw.WriteLine(\"Exception 异常信息如下.................\"); sw.WriteLine(error.ToString()); sw.WriteLine(\"---------------------------------------------\"); sw.Close(); } } } #endregion #region 利用.Net自带类(SmtpClient) 发送邮件 /// <summary> /// 利用.Net自带类(SmtpClient) 发送邮件 /// </summary> /// <param name=\"stmpserver\">邮件服务器</param> /// <param name=\"username\">用户名(邮箱名称)</param> /// <param name=\"pwd\">密码</param> /// <param name=\"f\">是否经过SSL加密</param> /// <param name=\"port\">邮件服务器端口(没有加密 一般都是25)</param> /// <param name=\"strfrom\">发件人</param> /// <param name=\"strto\">收件人</param> /// <param name=\"subject\">主题</param> /// <param name=\"body\">内容</param> /// <param name=\"Mulitaddress\">发送多人 收件人的邮箱地址以逗号隔开</param> /// <param name=\"attachmentName\">发送的附件名称 没有附件则为null or \"\"</param> public void SendEmailToUser(string stmpserver,int port,bool f, string Mulitaddress, string attachmentName, string username, string pwd, string strfrom, string subject, string body) { string ErrorLog = GetConfigValue(\"ErrorLog\"); SmtpClient smtp = new SmtpClient(); //发送邮件的方式 smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //指定邮件服务器 smtp.Host = stmpserver; //Gmail QQ stmp ssl加密使用的端口 smtp.Port = port; smtp.EnableSsl = f; ;//true 经过ssl加密 //验证发件人的身份 用户名(邮件地址和密码) smtp.Credentials = new System.Net.NetworkCredential(username, pwd); //初始化信息(来自 接收人) MailMessage _mailmessage = new MailMessage(); //_mailmessage.To = strto; //发送多个人 接收人邮件地址以,隔开 _mailmessage.From = new MailAddress(strfrom); _mailmessage.To.Add(Mulitaddress); //如果发送失败,SMTP 服务器将发送 失败邮件通知 _mailmessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; //优先级 _mailmessage.Priority = MailPriority.High; //发送主题 _mailmessage.Subject = subject; //有附件则添加附件 if (!string.IsNullOrEmpty(attachmentName)) { System.Net.Mail.Attachment attch = new System.Net.Mail.Attachment(attachmentName); _mailmessage.Attachments.Add(attch); } //邮件主题编码 _mailmessage.SubjectEncoding = System.Text.Encoding.UTF8; //指定发送的格式 (Html) _mailmessage.IsBodyHtml = true; //指定发送邮件的编码 _mailmessage.BodyEncoding = System.Text.Encoding.UTF8; //指定邮件内容 _mailmessage.Body = body; //发送邮件 try { smtp.Send(_mailmessage); } catch (Exception ex) { using (StreamWriter writer = new StreamWriter(ErrorLog+\"://MailErrorlog.txt\", true, System.Text.Encoding.UTF8)) { writer.WriteLine(\"---------------------------------------------\"); writer.WriteLine(\"SendEmail方法发送邮件错误日志................\"); writer.WriteLine(ex.ToString()); writer.Flush(); writer.Close(); } } } #endregion #region 获取邮件配置节点的值 /// <summary> /// 加载相应配置文件 并按节点名称获取对应的值 /// </summary> /// <param name=\"target\">当前节点的名称</param> /// <returns>返回当前节点名称所对应的值</returns> public string GetConfigValue(string target) { string configpath=System.Windows.Forms.Application.StartupPath.ToString() + \"/Email.config\"; return GetConfigValue(configpath, target); } /// <summary> /// 根据节点名称获取配置文件对应的值(邮件配置信息) /// </summary> /// <param name=\"configpath\">配置文件路径</param> /// <param name=\"target\">要获取配置节点的名称</param> /// <returns>返回当前节点名称所对应的值</returns> public string GetConfigValue(string configpath, string target) { XmlDocument doc = new XmlDocument(); //加载文件路径s doc.Load(configpath); //获取当前节点的根节点 XmlElement root = doc.DocumentElement; //获取当前节点下所有匹配子节点元素 XmlNodeList xmlnode = root.GetElementsByTagName(target); //返回值 return xmlnode[0].InnerXml; } #endregion //服务结束 protected override void OnStop() { time.Enabled = false; }
Email.Config如下:
<?xml version=\"1.0\" encoding=\"utf-8\"?> <Emailconfig> <!--邮件服务器地址 Gmail stmp.gmail.com--> <smtpserver>*****</smtpserver> <!--邮箱用户名 --> <emailuserName>***</emailuserName> <!--邮箱密码--> <emailuserpwd>****</emailuserpwd> <!--邮箱地址--> <emailfrom>*****</emailfrom> <!--是否启用定时发送邮件功能--> <isOpen>true</isOpen> <!--前提下isOpen为true 定在每天某个时间点发送邮件--> <sendTime>8:53</sendTime> <!--是否经过SSL加密--> <SSL>false</SSL> <!--Gmail smtp SSL加密 (Gmail:587) 服务器端口(没有加密(SSL 配置为false) 一般都是25 (163,qq))--> <serverPort>25</serverPort> <!--线程睡眠时间--> <SleepTime>1000</SleepTime> <!--定停发送时间--> <stoptime>0</stoptime> <!--发送邮件错误日志路径 盘根目录--> <ErrorLog>E</ErrorLog> <!--定义数据库连接字符串--> <Connstr></Connstr> </Emailconfig>
SQLHelper如下:
#region 数据库操作类的封装 public abstract class SqlHelper { //Database connection strings public static readonly string ConnectionStringLocalTransaction = Connstr; // Hashtable to store cached parameters private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); /*返回数据库连接*/ public static SqlConnection getConnection() { SqlConnection c = new SqlConnection(ConnectionStringLocalTransaction); return c; } /// <summary> /// Execute a SqlCommand that returns a resultset against the database specified in the connection string /// using the provided parameters. /// </summary> /// <remarks> /// e.g.: /// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, \"PublishOrders\", new SqlParameter(\"@prodid\", 24)); /// </remarks> /// <param name=\"connectionString\">a valid connection string for a SqlConnection</param> /// <param name=\"commandType\">the CommandType (stored procedure, text, etc.)</param> /// <param name=\"commandText\">the stored procedure name or T-SQL command</param> /// <param name=\"commandParameters\">an array of SqlParamters used to execute the command</param> /// <returns>A SqlDataReader containing the results</returns> public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); // we use a try/catch here because if the method throws an exception we want to // close the connection throw code, because no datareader will exist, hence the // commandBehaviour.CloseConnection will not work try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } } public static DataSet ReturnDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(ConnectionStringLocalTransaction); // we use a try/catch here because if the method throws an exception we want to // close the connection throw code, because no datareader will exist, hence the // commandBehaviour.CloseConnection will not work try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); DataSet ds = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(ds); return ds; } catch { conn.Close(); throw; } } /// <summary> /// Execute a SqlCommand that returns a resultset against the database specified in the connection string /// using the provided parameters. /// </summary> /// <remarks> /// e.g.: /// SqlDataReader r = ExecuteReader(SqlConnection, CommandType.StoredProcedure, \"PublishOrders\", new SqlParameter(\"@prodid\", 24)); /// </remarks> /// <param name=\"connectionString\">a valid connection string for a SqlConnection</param> /// <param name=\"commandType\">the CommandType (stored procedure, text, etc.)</param> /// <param name=\"commandText\">the stored procedure name or T-SQL command</param> /// <param name=\"commandParameters\">an array of SqlParamters used to execute the command</param> /// <returns>A SqlDataReader containing the results</returns> public static SqlDataReader ExecuteReader(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); // we use a try/catch here because if the method throws an exception we want to // close the connection throw code, because no datareader will exist, hence the // commandBehaviour.CloseConnection will not work try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } } /// <summary> /// Execute a SqlCommand that returns a resultset against the database specified in the connection string /// using the provided parameters. /// </summary> /// <remarks> /// e.g.: /// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, \"PublishOrders\", new SqlParameter(\"@prodid\", 24)); /// </remarks> /// <param name=\"connectionString\">a valid connection string for a SqlConnection</param> /// <param name=\"commandType\">the CommandType (stored procedure, text, etc.)</param> /// <param name=\"commandText\">the stored procedure name or T-SQL command</param> /// <param name=\"commandParameters\">an array of SqlParamters used to execute the command</param> /// <returns>A SqlDataReader containing the results</returns> public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(ConnectionStringLocalTransaction); // we use a try/catch here because if the method throws an exception we want to // close the connection throw code, because no datareader will exist, hence the // commandBehaviour.CloseConnection will not work try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } } /// <summary> /// add parameter array to the cache /// </summary> /// <param name=\"cacheKey\">Key to the parameter cache</param> /// <param name=\"cmdParms\">an array of SqlParamters to be cached</param> public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) { parmCache[cacheKey] = commandParameters; } /// <summary> /// Retrieve cached parameters /// </summary> /// <param name=\"cacheKey\">key used to lookup parameters</param> /// <returns>Cached SqlParamters array</returns> public static SqlParameter[] GetCachedParameters(string cacheKey) { SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey]; if (cachedParms == null) return null; SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length]; for (int i = 0, j = cachedParms.Length; i < j; i++) clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone(); return clonedParms; } /// <summary> /// Prepare a command for execution /// </summary> /// <param name=\"cmd\">SqlCommand object</param> /// <param name=\"conn\">SqlConnection object</param> /// <param name=\"trans\">SqlTransaction object</param> /// <param name=\"cmdType\">Cmd type e.g. stored procedure or text</param> /// <param name=\"cmdText\">Command text, e.g. Select * from Products</param> /// <param name=\"cmdParms\">SqlParameters to use in the command</param> private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } /// <summary> /// 传入输入参数 /// </summary> /// <param name=\"ParamName\">存储过程名称</param> /// <param name=\"DbType\">参数类型</param></param> /// <param name=\"Size\">参数大小</param> /// <param name=\"Value\">参数值</param> /// <returns>新的 parameter 对象</returns> public static SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) { return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value); } public void MakeInParam(ref string OldString, string ParamName, SqlDbType DbType, int Size, object Value) { OldString = OldString.Replace(ParamName, (string)Value); } /// <summary> /// 传入返回值参数 /// </summary> /// <param name=\"ParamName\">存储过程名称</param> /// <param name=\"DbType\">参数类型</param> /// <param name=\"Size\">参数大小</param> /// <returns>新的 parameter 对象</returns> public static SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) { return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null); } /// <summary> /// 传入返回值参数 /// </summary> /// <param name=\"ParamName\">存储过程名称</param> /// <param name=\"DbType\">参数类型</param> /// <param name=\"Size\">参数大小</param> /// <returns>新的 parameter 对象</returns> public static SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size) { return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null); } /// <summary> /// 生成存储过程参数 /// </summary> /// <param name=\"ParamName\">存储过程名称</param> /// <param name=\"DbType\">参数类型</param> /// <param name=\"Size\">参数大小</param> /// <param name=\"Direction\">参数方向</param> /// <param name=\"Value\">参数值</param> /// <returns>新的 parameter 对象</returns> public static SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) { SqlParameter param; if (Size > 0) param = new SqlParameter(ParamName, DbType, Size); else param = new SqlParameter(ParamName, DbType); param.Direction = Direction; if (!(Direction == ParameterDirection.Output && Value == null)) param.Value = Value; return param; } /// <summary> /// 创建 SqlCommand 对象实例(用来返回一个整数值) /// </summary> /// <param name=\"storedProcName\">存储过程名</param> /// <param name=\"parameters\">存储过程参数</param> /// <returns>SqlCommand 对象实例</returns> private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.Parameters.Add(new SqlParameter(\"ReturnValue\", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null)); return command; } /// <summary> /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// </summary> /// <param name=\"connection\">数据库连接</param> /// <param name=\"storedProcName\">存储过程名</param> /// <param name=\"parameters\">存储过程参数</param> /// <returns>SqlCommand</returns> private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; } #region 执行查询语句 返回dataset /// <summary> /// 执行查询语句,返回DataSet /// </summary> /// <param name=\"cmdText\">查询语句</param> /// <returns>DataSet</returns> public static DataSet GetDataSet(string cmdText) { using (SqlConnection conn = new SqlConnection(ConnectionStringLocalTransaction)) { SqlCommand sqlcmd = new SqlCommand(cmdText, conn); sqlcmd.CommandTimeout = 1000; SqlDataAdapter cmd = new SqlDataAdapter(sqlcmd); DataSet ds = new DataSet(); try { conn.Open(); cmd.Fill(ds, \"mydt\"); return ds; } catch (Exception ex) { conn.Close(); cmd.Dispose(); conn.Dispose(); throw new Exception(ex.Message); } finally { cmd.Dispose(); conn.Close(); conn.Dispose(); } } } #endregion } #endregion
将C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe 拷贝到执行的目录Bin Debug文件下 然后注册windows服务
希望本文所述对大家asp.net程序设计有所帮助。
本文地址:https://www.stayed.cn/item/2327
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我