c# - 从 SQL Server 2008 R2 使用 GSM 调制解调器发送 SMS

标签 c# sms serial-port sql-server-2008-r2 sqlclr

我想在 SQL Server 2008 中使用 GSM 调制解调器的 AT 命令发送 SMS,因此我编写了一个 Visual C# SQL CLR 数据库项目和一个存储过程。

但是当我执行那个存储过程时,我收到了这个错误:

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

存储过程的源代码和发送短信的类是这些:

[Microsoft.SqlServer.Server.SqlProcedure]
public static void SendSMS2(string phone, string message)
{
    SMSManagement.SM2S ss = new SMSManagement.SM2S();
    ss.SendMessage(phone, message);
}

public void SendMessage(string PhoneNumber, string Message)
{
    try
    {
        SerialPort port = new SerialPort();

        port.PortName = "COM5";                
        port.BaudRate = 115200;                  
        port.DataBits = 8;                
        port.StopBits = StopBits.One;     
        port.Parity = Parity.None;        
        port.ReadTimeout = 300;           
        port.WriteTimeout = 300;          

        // Error occurred in here.
        port.Open();
        port.DtrEnable = true;
        port.RtsEnable = true;

        SMS sms = new SMS();
        sms.Direction = SMSDirection.Submited;
        sms.PhoneNumber = PhoneNumber;
        sms.ValidityPeriod = new TimeSpan(4, 0, 0, 0);
        sms.Message = Message;

        Message = sms.Compose(SMS.SMSEncoding.UCS2);

        ExecCommand(port, "AT", 300, "No phone connected");
        ExecCommand(port, "AT+CMGF=0", 300, "Failed to set pdu format.");
        ExecCommand(port, "AT+CMGS=1", 300, "Failed to set message length.");
        string command = Message + char.ConvertFromUtf32(26);
        ExecCommand(port, command, 6000, "Failed to send message"); 

        port.Close();
    }
    catch (Exception ex)
    {
        SqlContext.Pipe.Send(ex.Message);
    }
}

Visual Studio和SQL Server的版本是2010 SP1和2008 R2。 CLR项目框架为2.0。

最佳答案

您没有提到如何将程序集安装到 SQL Server 中。如果您只是直接从 Visual Studio 部署 - 您指定了什么权限级别??

enter image description here

默认值是 Safe,只要您只在 SQL Server 中工作——正则表达式匹配或类似的东西,这是可以的。

如果你想从 SQL Server“伸出手”并与世界沟通,你必须设置 Permission LevelUnsafe 之前您将程序集部署到 SQL Server 中。

关于c# - 从 SQL Server 2008 R2 使用 GSM 调制解调器发送 SMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268723/

相关文章:

c - 0x9B (155decimal) 是一个特殊的控制字符吗?为什么它在 ascii 表中不见了?

2台vmware fusion虚拟机之间配置虚拟串口

c# - 一对多的关系总是让我感到空虚

c# - c# dotnet linux 中的 Postgresql 数据库连接代码

java - 在 netbeans 上运行时没有错误,但在运行 jar 时却没有错误?

ios - 在 iOS 上使用 Alamofire 的 Twilio POST 请求

c# - 为什么在将 C# 值元组与 == 进行比较时,编译器会创建隐藏副本?

c# - .Net 套接字 -> 抛出 System.InvalidOperationException

android - Android 中短信和联系人的唯一标识符(检查重复)

iphone - 在 iPhone 中访问/dev/tty.iap 被拒绝