文档章节

System.Data.SqlClient.SqlCommand

fandyx
 fandyx
发布于 2015/02/03 13:59
字数 474
阅读 46
收藏 0
/// <summary>
/// Definitions (and values) for SQL Server Signature queries
/// </summary>
class SigSigningProvider_SQLServer_Server
{
    #define.SystemDataSqlDbType('System.Data.SqlDbType')
    #define.NVarChar('NVarChar')
    #define.DateTime('DateTime')
    #define.VarBinary('VarBinary')
    #define.Int('Int')
    #define.SystemConvert('System.Convert')
    #define.ToBase64String('ToBase64String')
    #define.FromBase64String('FromBase64String')

    #define.ElementNameSignatureList('signaturelist')
    #define.ElementNameSignature('signature')
    #define.AttrNameStart('start')
    #define.AttrNameLength('length')

    #define.PosStart(1)
    #define.PosLength(2)
    #define.PosSignature(3)

    System.Data.SqlClient.SqlConnection conn;
}
/// Verify if there is a valid certificate for the <paramref name="_signeeId" />
/// </summary>
/// <param name="_signeeId">
/// Certificate signee
/// </param>
/// <returns type="boolean">
/// true, if a vaild certificate is found for signee; otherwise false
/// </returns>
/// <exception cref="Exception::Error">
/// SQL Server was unable to validate certificate
/// </exception>
public boolean hasValidCertificateSQL(SIGSQLCertSubject _signeeId)
{
    #LocalMacro.SelectStmt
        ' SELECT COUNT(*) FROM sys.certificates '
        + ' WHERE subject = @s'
        + ' AND start_date <= @f'
        + ' AND expiry_date > @t'
        + ' AND pvt_key_encryption_type = N\'PW\''
    #EndMacro
    #define.ParmNameSubject('@s')
    #define.ParmNameStartDate('@f')
    #define.ParmNameExpiryDate('@t')

    System.Data.SqlClient.SqlCommand                cmd;
    System.Data.SqlClient.SqlParameter              param;
    System.Data.SqlDbType                           type;
    System.Data.SqlClient.SqlParameterCollection    params;
    str                                             stmtText;
    int                                             intRes;
    boolean                                         ret = false;
    utcdatetime                                     utcToday;
    str                                             errMsg;
    ;

    utcToday = DateTimeUtil::newDateTime(systemdateget(),0);
    stmtText = #SelectStmt;

    try
    {
        new InteropPermission(InteropKind::ClrInterop).assert();
        conn.Open();
        cmd = conn.CreateCommand();
        cmd.set_CommandText(stmtText);

        params = cmd.get_Parameters();
        type = CLRInterop::parseClrEnum(#SystemDataSqlDbType,#NVarChar);
        param = params.Add(#ParmNameSubject,type);
        param.set_Value(_signeeId);

        type = CLRInterop::parseClrEnum(#SystemDataSqlDbType,#DateTime);
        param = params.Add(#ParmNameStartDate,type);
        param.set_Value(utcToday);

        param = params.Add(#ParmNameExpiryDate,type);
        param.set_Value(utcToday);

        intRes = cmd.ExecuteScalar();
        ret = (intRes > 0);
        conn.Close();
    }
    catch
    {
        errMsg = AifUtil::getClrErrorMessage();
        try
        {
            conn.Close();
        }
        catch
        {
            ret = false;
        }
        throw error(errMsg ? errMsg : "@SYP1558");
    }
    return ret;
}
//---------------------------------------
/// <summary>
/// Revoke permission to certificate
/// </summary>
/// <param name="_id">
/// Certificate Id for certificate to have permissions revoked
/// </param>
public void revokeCertificateSQL(SIGCertificateId _id)
{
    #LocalMacro.RevokeStmt
        'ALTER CERTIFICATE \%1 REMOVE PRIVATE KEY'
    #EndMacro
    System.Data.SqlClient.SqlCommand    cmd;
    str                                 stmtText;
    str                                 name;
    str                                 subject;
    ;

    name = this.getNameForId(_id);
    if (!name)
    {
        return;
    }
    subject = this.getSubjectForId(_id);
    if (subject != curuserid()
        && (!hasSecuritykeyAccess(securitykeynum(AdminSetup), AccessType::Delete)))
    {
        return;
    }
    stmtText = strfmt(#RevokeStmt,name);

    try
    {
        new InteropPermission(InteropKind::ClrInterop).assert();
        conn.Open();
        cmd = conn.CreateCommand();
        cmd.set_CommandText(stmtText);

        cmd.ExecuteNonQuery();
        conn.Close();
    }
    catch
    {
        try
        {
            conn.Close();
        }
        catch
        {
            stmtText = '';
        }
    }
}
//----------------------------------------------
/// <summary>
/// Retrieve certificate name base on certificate Id (<paramref name="_id" />
/// </summary>
/// <param name="_id">
/// Certificate Id
/// </param>
/// <returns type="str">
/// Certificate name
/// </returns>
public str getSubjectForId(SIGCertificateId _id)
{
    #LocalMacro.SelectStmt
        ' SELECT subject'
        + ' FROM sys.certificates '
        + ' WHERE certificate_id = @id'
    #EndMacro
    #define.ParmNameId('@id')

    System.Data.SqlClient.SqlCommand                cmd;
    System.Data.SqlClient.SqlParameter              param;
    System.Data.SqlDbType                           type;
    System.Data.SqlClient.SqlParameterCollection    params;
    str                                             stmtText;
    str                                             subject;
    ;

    stmtText = #SelectStmt;

    try
    {
        new InteropPermission(InteropKind::ClrInterop).assert();
        conn.Open();
        cmd = conn.CreateCommand();
        cmd.set_CommandText(stmtText);

        params = cmd.get_Parameters();
        type = CLRInterop::parseClrEnum(#SystemDataSqlDbType,#Int);
        param = params.Add(#ParmNameId,type);
        param.set_Value(_id);

        subject = cmd.ExecuteScalar();
        conn.Close();
    }
    catch
    {
        try
        {
            conn.Close();
        }
        catch
        {
            subject = '';
        }
    }
    return subject;
}
//------------------------------------------------
/// <summary>
/// Revoke permission to certificate
/// </summary>
/// <param name="_id">
/// Certificate Id for certificate to have permissions revoked
/// </param>
public void revokeCertificateSQL(SIGCertificateId _id)
{
    #LocalMacro.RevokeStmt
        'ALTER CERTIFICATE \%1 REMOVE PRIVATE KEY'
    #EndMacro
    System.Data.SqlClient.SqlCommand    cmd;
    str                                 stmtText;
    str                                 name;
    str                                 subject;
    ;

    name = this.getNameForId(_id);
    if (!name)
    {
        return;
    }
    subject = this.getSubjectForId(_id);
    if (subject != curuserid()
        && (!hasSecuritykeyAccess(securitykeynum(AdminSetup), AccessType::Delete)))
    {
        return;
    }
    stmtText = strfmt(#RevokeStmt,name);

    try
    {
        new InteropPermission(InteropKind::ClrInterop).assert();
        conn.Open();
        cmd = conn.CreateCommand();
        cmd.set_CommandText(stmtText);

        cmd.ExecuteNonQuery();
        conn.Close();
    }
    catch
    {
        try
        {
            conn.Close();
        }
        catch
        {
            stmtText = '';
        }
    }
}


© 著作权归作者所有

共有 人打赏支持
fandyx
粉丝 0
博文 39
码字总数 11111
作品 0
东莞
技术主管
私信 提问
C#从SqlServer数据库读写文件源码

如下的资料是关于C#从SqlServer数据库读写文件的内容,希望能对码农们有一些用。 <%@ Page Language="C#" %>

不是叫兽
01/11
0
0
C#调用存储过程简单完整例子

CREATE PROC P_TEST @Name VARCHAR(20), @Rowcount INT OUTPUT AS BEGIN SELECT * FROM T_Customer WHERE NAME=@Name SET @Rowcount=@@ROWCOUNT END GO -----------------------------------......

晨曦之光
2012/03/09
64
0
在C#里实现DATAGRID的打印预览和打印

作者Blog: http://blog.csdn.net/qieyj/ 很多人都在论坛里问,如何实现DATAGRID的打印预览和打印,现在我就把这方面的源代码告诉大家。这段代码也花费了我1个晚上的时间,呵呵!数据库是基于...

晨曦之光
2012/03/09
180
0
实现SQL -> C# Class Code工具的问题

有一段时间大家都在讨论生成SQL操作数据库代码的AutoCode工具,我也趁着热闹把我做的一个SQL AutoCode工具拿出来讨论,不过后来忘掉了这事,今天看见有人回复,希望把源码拿出来参考参考,索...

唐玄奘
2017/12/18
0
0
GridView自定义分页导航

自己做的一个项目中所运用到的技术:| 1. 日历控件(带时分秒) 2. GridView 批量删除,自定义分页,定位页码 3. GridView 修改 4. GridView 鼠标经过改变行的颜色 效果如下: HTML: <% @ Pag...

晨曦之光
2012/03/09
283
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0
android自定义viewgroup画背景

设计部要求背景实现一个背景边框带圆弧的效果: 所以想着用自定义控件画一个背景。 为了方便,继承的是LinearLayout,在onMeasure中先获取控件宽高: @Overrideprotected void onMeasure(in...

醉雨
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部