当前位置:编程学习 > C#/ASP.NET >>

分享:用C#写了一个新增用户就发送邮件和手机短信的SqlServer触发器(附源码) 欢迎大家批评指正

分享:用C#写了一个新增用户就发送邮件和手机短信的SqlServer触发器(附源码)

 欢迎大家批评指正

//针对SqlServer2005及已上版本
//CLR开发测试环境 VS2008 + Windows7
//SqlServer测试版本:SqlServer2005
//项目名:SendSMSTrigger
//编译后会产生2个类库:SendSMSTrigger.dll SendSMSTrigger.XmlSerializers.dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Net.Mail;

public class SendSMSTrigger
{
    /// <summary>
    /// 发送邮件
    /// </summary>
    /// <param name="tomail">收件人邮件地址</param>
    /// <param name="title">标题</param>
    /// <param name="content">邮件正文</param>
    /// <param name="FormUser">发件人账号</param>
    /// <param name="userPwd">发件人密码</param>
    public static void sendEmail(string tomail, string title, string content, string FormUser, string userPwd)
    {
        MailAddress from = new MailAddress(FormUser + "@bwsyq.com");
        MailAddress to = new MailAddress(tomail);
        MailMessage MyMessage = new MailMessage(from, to);
        MyMessage.Priority = MailPriority.Normal;
        MyMessage.Priority = MailPriority.Normal;

        MyMessage.IsBodyHtml = false;
        MyMessage.IsBodyHtml = true;
        MyMessage.Body = content;
        MyMessage.BodyEncoding = System.Text.Encoding.UTF8;
        MyMessage.Subject = title;

        string SmtpServer = "mail.bwsyq.com";
        SmtpClient client = new SmtpClient(SmtpServer);
        System.Net.NetworkCredential cred = new System.Net.NetworkCredential(FormUser, userPwd);
        client.Credentials = cred;
        client.Send(MyMessage);

    }

    /// <summary>
    /// 发送手机短信
    /// </summary>
    /// <param name="mMobilNumber">手机号码</param>
    /// <param name="sMessageContent">短信内容</param>
    /// <returns></returns>
    public static string SendSMS(string mMobilNumber, string sMessageContent)
    {
        SmsInterfaceService SmsInterfaceDemo = new SmsInterfaceService();
        return SmsInterfaceDemo.clusterSend("短信接口用户名", "短信接口密码",
                "1360000000", mMobilNumber, sMessageContent, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), "0|0|0|0");
    }

    /// <summary>
    /// 针对表Users的新增CLR触发器
    /// </summary>
    [SqlTrigger(Name = @"SendSMSTrigger", Target = "[dbo].[Users]", Event = "FOR INSERT")]
    public static void SendSMS()
    {
        string userName;
        string realName;
        string eMail;
        string mobilNumber;
        SqlCommand command;
        SqlTriggerContext triggContext = SqlContext.TriggerContext;
        SqlPipe pipe = SqlContext.Pipe;
        SqlDataReader reader;

        switch (triggContext.TriggerAction)
        {
            case TriggerAction.Insert:
                // Retrieve the connection that the trigger is using
                using (SqlConnection connection
                   = new SqlConnection(@"context connection=true"))
                {
                    connection.Open();
                    command = new SqlCommand(@"SELECT * FROM INSERTED;",
                       connection);
                    reader = command.ExecuteReader();
                    reader.Read();
                    userName = (string)reader[0];
                    realName = (string)reader[1];
                    eMail = (string)reader[2];
                    mobilNumber = (string)reader[3];
                    reader.Close();

                    if (IsValidEMailAddress(eMail))
                    {
                        //发通知邮件
                        sendEmail(eMail, realName + "您好!恭喜注册成功!", " 您的用户名是:" + userName, "bwsyq@bwsyq.com", "发件人密码");
                        //发手机短信
                        SendSMS(mobilNumber, realName + "您好!恭喜注册成功! 您的用户名是:" + userName);
                        //SqlServer 管道返回信息
                        pipe.Send(realName + "您好!恭喜注册成功! 您的用户名是:" + userName);
                    }
                }
                break;
            default:
                break;
        }
    }

    /// <summary>
    /// 验证邮件是否合法
    /// </summary>
    /// <param name="email">邮件地址</param>
    /// <returns><c>true</c>表示邮件地址格式合法 <c>false</c>表示邮件地址格式不合法<</returns>
    public static bool IsValidEMailAddress(string email)
    {
        return Regex.IsMatch(email, @"^([\w-]+\.)*?[\w-]+@[\w-]+\.([\w-]+\.)*?[\w]+$");
    }
}

--SqlServer2005 中的挂接脚本、代码、相关说明
IF OBJECT_ID(N'Users') IS NOT NULL
drop table Users
go
CREATE TABLE Users                    --(测试用)用户表
(
    UserName nvarchar(200) NOT NULL,  --用户名
    RealName nvarchar(200) NOT NULL,  --真实姓名
    EMail nvarchar(200) NOT NULL,     --邮件地址
    MobilNumber varchar(20) not null  --手机号码
);
GO

--建立触发器程序集
CREATE ASSEMBLY [SendSMSTrigger.XmlSerializers.dll] from 'E:\SendSMSTrigger.XmlSerializers.dll'
WITH PERMISSION_SET = UNSAFE;
go
--建立序列化处理器程序集
CREATE ASSEMBLY SendSMSTrigger from 'E:\SendSMSTrigger.dll'
WITH PERMISSION_SET = UNSAFE;
go

--提升SqlServer支持版本
EXEC sp_dbcmptlevel N'DB_EMP2', 90
go
--开通CLR权限
EXEC sp_configure 'show advanced options' , '1';
GO
RECONFIGURE;
GO
EXEC sp_configure 'clr enabled' , '1'
GO
RECONFIGURE;
GO

IF OBJECT_ID(N'trig_SendSMSTrigger') IS NOT NULL
drop TRIGGER trig_SendSMSTrigger
go
--建立SqlServer触发器并 C#触发器关联
CREATE TRIGGER trig_SendSMSTrigger
ON Users
FOR INSERT
AS
EXTERNAL NAME SendSMSTrigger.SendSMSTrigger.SendSMS
go

--测试,模拟用户注册,成功后您将收到 注册成功通知邮件和手机短信通知
insert into Users (UserName,RealName,EMail,MobilNumber)
values('USer0001', '百万商业圈', 'bwsyq@bwsyq.com', '13818466XXX')
go

 
作者CSDN博客

版权所有:百万商业圈

未经许可不得转载,有任何疑问请与我本人联系 QQ 99923309 Mail:bwsyq@bwsyq.com

开源:完全自主研发搜索引擎1.0源代码及说明,单机400万网页,任意50词以内的检索不超过 20毫秒
开源:基于百万商业圈.NET开发框架开发的并行带分词的采集器

天心天字辈ERP全部PDK源代码到了我手上的后果 - 超越天心之WEB天云
--------------------编程问答-------------------- 佩服,学习~ --------------------编程问答-------------------- 推荐置顶,收藏先~ --------------------编程问答-------------------- 专顶精华贴~ --------------------编程问答-------------------- 非常不错 --------------------编程问答-------------------- 支持支持 --------------------编程问答-------------------- up............ --------------------编程问答-------------------- --------------------编程问答--------------------   mark.... --------------------编程问答-------------------- 看着太费劲了...  贴代码的时候你能不能用插入源代码贴啊。 --------------------编程问答-------------------- 无私奉献,顶一个! --------------------编程问答-------------------- 占个位置..... --------------------编程问答-------------------- 做个记号,以后学习 --------------------编程问答-------------------- 好东西。up --------------------编程问答-------------------- 楼主牛人啊。顶一个。 --------------------编程问答-------------------- MARK --------------------编程问答-------------------- 支持。
问个问题:当插入一条数据后,会触发你写的这个程序,但是发送邮件和短信需要时间较长,尤其是短信,这样会不会造成数据库的插入等待,等你发送完了,才插入成功吧,这个会影响数据库性能吧??

考虑加入线程处理吧。 --------------------编程问答-------------------- 找不到类型或命名空间名称“SmsInterfaceService”(是否缺少 using 指令或程序集引用?)


LZ解释!!! --------------------编程问答-------------------- 强。。。我是学不会了。 --------------------编程问答-------------------- 好东东,顶。。 --------------------编程问答-------------------- 果断Mark  置顶。。。。推荐!! --------------------编程问答--------------------
引用 17 楼 szwangjingjing 的回复:
找不到类型或命名空间名称“SmsInterfaceService”(是否缺少 using 指令或程序集引用?)


LZ解释!!!


等LZ答案!!! --------------------编程问答-------------------- 好东西啊 --------------------编程问答-------------------- 顶一个! --------------------编程问答-------------------- 看看,学习一下 --------------------编程问答--------------------
引用 21 楼 szwangjingjing 的回复:
引用 17 楼 szwangjingjing 的回复:
找不到类型或命名空间名称“SmsInterfaceService”(是否缺少 using 指令或程序集引用?)


LZ解释!!!


等LZ答案!!!


这个是移动公司提供的短信WebServices接口中的
WebServices地址是:http://ws.iems.net.cn/GeneralSMS/ws/SmsInterface?wsdl --------------------编程问答-------------------- 支持一下!
---------------
btw:感觉此贴出现了2次...  --------------------编程问答-------------------- 学习学习!! --------------------编程问答-------------------- 顶一下。 --------------------编程问答-------------------- 佩服楼主,加油。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- Mark --------------------编程问答-------------------- 没啥用处 --------------------编程问答-------------------- 加油加油啊 --------------------编程问答-------------------- 支持支持! --------------------编程问答-------------------- Mark.. --------------------编程问答-------------------- 这个必须Mark! --------------------编程问答-------------------- Mark.. --------------------编程问答--------------------

此帖发了2次了吧??还有lz的ID怎么这么熟悉??怎么跟每日标兵的那个钻戒的那位ID雷同啊 --------------------编程问答--------------------
引用 25 楼 suoyiminmin 的回复:
引用 21 楼 szwangjingjing 的回复:

引用 17 楼 szwangjingjing 的回复:
找不到类型或命名空间名称“SmsInterfaceService”(是否缺少 using 指令或程序集引用?)


LZ解释!!!


等LZ答案!!!


这个是移动公司提供的短信WebServices接口中的
WebServices地址是:http://……



如何使用??? --------------------编程问答-------------------- 谢谢LZ分享,收藏先。有时间学习。 --------------------编程问答-------------------- 每天回帖即可获得10分可用分! --------------------编程问答-------------------- 真的吗? --------------------编程问答-------------------- mark --------------------编程问答-------------------- 学习  学习 --------------------编程问答-------------------- mark --------------------编程问答-------------------- C#里面可以写SQL的触发器么? --------------------编程问答-------------------- 很好啊,看看哦 --------------------编程问答-------------------- 很好啊,看看哦 --------------------编程问答-------------------- 学习无止境啊!~ --------------------编程问答-------------------- 很入门的代码

支持下
--------------------编程问答-------------------- 学习了 --------------------编程问答--------------------     好 !@! --------------------编程问答-------------------- 支持! --------------------编程问答-------------------- 在有个短信用户名和密码就好了。。 --------------------编程问答-------------------- 天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 --------------------编程问答-------------------- 這個不錯. --------------------编程问答-------------------- 来看看  很好 --------------------编程问答-------------------- --------------------编程问答-------------------- 不错,研究下 --------------------编程问答-------------------- 谢谢,学习了!! --------------------编程问答-------------------- --------------------编程问答-------------------- 学习,谢谢分享! --------------------编程问答-------------------- 学习~~~ --------------------编程问答-------------------- 学习了,曾经有用过,没你厉害~~ --------------------编程问答-------------------- 学习了  很厉害 --------------------编程问答-------------------- 学习啊啊啊啊啊啊啊啊 --------------------编程问答-------------------- 学习啊啊啊啊 --------------------编程问答-------------------- 支持,顶一个!!! --------------------编程问答-------------------- 好好好,顶个 --------------------编程问答-------------------- 好像学习 C#语言 --------------------编程问答-------------------- 发短信我一般我会采用短信猫,直接插入数据库对应表即可. --------------------编程问答-------------------- 很好,学习了,收藏。 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 学习,顶 --------------------编程问答--------------------   为什么不写个事件触发。 --------------------编程问答-------------------- 太好了,谢谢谢谢 --------------------编程问答-------------------- 支持一下,拿分走人 --------------------编程问答-------------------- 顶起!楼主威武! --------------------编程问答-------------------- 收藏 --------------------编程问答-------------------- 收藏 --------------------编程问答-------------------- 学习学习,NB,收藏了,看以后能用得上不。 --------------------编程问答-------------------- 保存了,谢谢 --------------------编程问答-------------------- 学习了,非常有用 --------------------编程问答-------------------- 路过学习。 --------------------编程问答-------------------- 第一次来论坛,原来还有这么多好东西 --------------------编程问答-------------------- 学习学习..... --------------------编程问答-------------------- 学习~~~~~~~~~~~~~~~~~~ --------------------编程问答-------------------- --------------------编程问答-------------------- mark --------------------编程问答-------------------- 谢谢分享 --------------------编程问答-------------------- 做个记号,以后会用到的 --------------------编程问答-------------------- 学习 学习   --------------------编程问答-------------------- 学习一下,谢谢! --------------------编程问答-------------------- 学习 学习
--------------------编程问答-------------------- 谢谢,收藏学习下。 --------------------编程问答-------------------- 收藏学习,找bug去! --------------------编程问答-------------------- 前一段时间也写了一个,谢谢分享。。 --------------------编程问答-------------------- 不错。学习一下 --------------------编程问答-------------------- 不错够可以 --------------------编程问答-------------------- 呀呀呀,不错啊,学习了。。。
面对的 
依然是蓝色的天空, 
依然是金色的阳光, 
依然是绿色的草地, 
依然是红色的跑道, 
依然是你, 勇敢的你, 
坚强的你。 
不同的是, 
天空更加蔚蓝,阳光更加灿烂, 
草地更如翡翠一般, 
跑道更加的鲜艳, 
而你,定会更加的自信, 
你的成绩,必然更加辉煌。 

致长跑运动员 

也许你心里忐忑不安, 
我们的心里早已热血沸腾。 
昔日, 
长长的跑道上, 
留下了你深深的足迹。 
抹不去你渗出的汗水, 
拉不动你沉重的双脚。 
你为了班级, 
不在乎自己疲惫, 
不在乎泪水和汗水, 
因为你心里有一种坚定的信念。 
为了班级,我能行。 

致1500米运动员 

一滴滴汗水, 
飘洒在绿茵场上, 
伴随着矫健的步伐, 
奏出希望的乐章。 

一种种信念, 
放在蔚蓝的天空, 
伴随着你那深沉的眼光, 
画出美丽的弧线。 

人生能有几回搏? 
千百双眼睛注视着你, 
为了希望、为了胜利, 
跑出青春的梦想。 

致铅球运动员 

手里紧握那沉重的铅球, 
那铅球上凝集了你的希望, 
你的理想, 
汇集全身的力量,推出理想, 
推出希望, 
铅球在空中闪亮, 
理想在空中发光 

弧线?? 
—致铅球运动员 

一道优美的弧线划过眼前, 
我不禁浮想连篇 
这精彩的弧线啊 
凝结着多少辛勤的汗水, 
无伦的弧线啊,寄托着多少热切的期盼。 
它是这般自然,又是如此完美, 
没有什么遗憾,只会留下一片美的体验。 
我要永远将你留下 
让我的心中印上一条弧线 

致铅球运动员 

铅球从你手里抛出, 
在空中划过一条, 
优美的抛物线。 

铅球从空中划过, 
落在竞赛场上, 
留下一个精彩的痕迹。 

每一次的投掷, 
都是激情的展现; 
每一次的落地, 
都是努力的结果。 


超 越 
—致跳高运动员 
在阳光的照耀下, 
跳高的比赛场地格外辉煌, 
运动健儿们, 
用那矫键的身躯, 
冲刺着一个又一个的高度。 
没有尝试, 
怎会知道自己是否为强者, 
超越自己, 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,