小编Jim*_*mex的帖子

从C#中的DBMS_OUTPUT.GET_LINES获取输出缓冲区

我试图DBMS_OUTPUT.PUT_LINE()通过C#从我的匿名PL/SQL块中获取方法的输出.我在这里看了几个其他相关的问题,但我仍然遇到麻烦.执行匿名块的返回代码正在返回-1,根据文档应该是正确的.

我正在设置DBMS_OUTPUT.ENABLE()to NULL以便不设置特定的缓冲区大小,然后使用该DBMS_OUTPUT.GET_LINES()方法从该缓冲区获取行.

它在缓冲区中返回任何内容(空OracleString[])并返回0行.我的匿名PL/SQL块很简单,但应该适用于任何.

DECLARE
    lvsName VARCHAR2(6) := 'Oracle';
BEGIN
    DBMS_OUTPUT.PUT_LINE('Do you see me?');
    DBMS_OUTPUT.PUT_LINE('My name is: ' || lvsName);    
END;
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

using (OracleDataAdapter oda = new OracleDataAdapter())
using (OracleCommand cmd = new OracleCommand(sql, _connection))
{
    // Execute anonymous PL/SQL block
    cmd.CommandType = CommandType.Text;
    var res = cmd.ExecuteNonQuery();

    // Set output Buffer
    cmd.CommandText = "BEGIN DBMS_OUTPUT.ENABLE(NULL); END;";
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();

    // Get output
    cmd.CommandText …
Run Code Online (Sandbox Code Playgroud)

.net c# oracle odp.net oracle-manageddataaccess

10
推荐指数
2
解决办法
848
查看次数

接收方未能验证签名的 XML 消息

我正在尝试根据为我们的测试应用程序提供给我们的规格表使用 C# 签署一些 XML。我们必须:

  1. 规范化消息。
  2. 使用摘要算法创建整个消息的摘要。
  3. 将摘要添加到 Signed Info 元素。
  4. 规范化签名信息。
  5. 将私钥和规范化的签名信息输入指定的签名算法以生成数字签名。
  6. 将生成的数字签名添加到签名元素。

这就是我目前所拥有的。

public static XmlElement Sign(XmlDocument msgDoc)
{
    XmlDsigExcC14NTransform transform = new XmlDsigExcC14NTransform();
    transform.LoadInput(msgDoc);
    msgDoc.Load(transform.GetOutput() as Stream);

    var signedXml = new SignedXml(msgDoc)
    {
        SigningKey = Certificate.GetRSAPrivateKey(),
    };

    signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;

    var reference = new Reference();
    reference.AddTransform(new XmlDsigEnvelopedSignatureTransform(true));
    reference.AddTransform(new XmlDsigC14N11Transform()); // Custom transform
    reference.Uri = string.Empty;
    reference.DigestMethod = SignedXml.XmlDsigSHA256Url;

    signedXml.SignedInfo.AddReference(reference);

    KeyInfo keyInfo = new KeyInfo();
    var keyInfoData = new KeyInfoX509Data();
    keyInfoData.AddIssuerSerial(CertManager.Certificate.Issuer, CertManager.Certificate.SerialNumber);
    keyInfoData.AddSubjectName(CertManager.Certificate.Subject);
    keyInfo.AddClause(keyInfoData);
    signedXml.KeyInfo = keyInfo;

    signedXml.ComputeSignature();
    XmlElement …
Run Code Online (Sandbox Code Playgroud)

c# xml cryptography signing xml-signature

5
推荐指数
1
解决办法
646
查看次数

为什么 GetMember(string) 返回一个 MemberInfo 数组?

我正在使用反射并遇到错误:

System.Reflection.TargetException:对象与目标类型不匹配

因为我认为那只Type.GetMember(string)会返回一个MemberInfo,但它没有

我很好奇为什么Type.GetMember(string)返回的原因MemberInfo[]。其他反射方法喜欢Type.GetProperty()Type.GetMethod()返回它们各自的PropetyInfoMethodInfo对象。

当其他反射方法没有Type.GetMember()返回数组的目的是什么MemberInfo[]

.net c# reflection

4
推荐指数
1
解决办法
287
查看次数

太多行投掷但只选择一行

我有这个过程,它只是根据一个被调用的列字段删除一行AppID.此过程从另一个AppNbr基于该行列调用的列获取值AppID.TOO_MANY_ROWS尝试SELECT连续时,该过程失败并出现异常.这是PL/SQL:

DECLARE
    lvnApplNbr NUMBER;

    PROCEDURE deleteAppl(applId IN VARCHAR2) IS
    BEGIN
        BEGIN
            SELECT ApplNbr -- Exception thrown here
            INTO lvnApplNbr
            FROM Appl
            WHERE ApplID = applId;
        EXCEPTION
            WHEN TOO_MANY_ROWS THEN
                DBMS_OUTPUT.PUT_LINE(SQLERRM);
        END;
        -- ... Delete it after some logic
    END; -- End Procedure
BEGIN
    ...
    deleteAppl('571E00BA-70E6-4523-BEAC-4568C3DD1A7D');
    ...
END;
Run Code Online (Sandbox Code Playgroud)

TOO_MANY_ROWS当异常被抛出SELECT INTO秒.我不知道为什么它会抛出那个错误,因为如果我只是查询这个:

SELECT ApplNbr FROM Appl WHERE ApplId = '571E00BA-70E6-4523-BEAC-4568C3DD1A7D';
Run Code Online (Sandbox Code Playgroud)

只有一行会回来正确ApplId.

到底是怎么回事?

sql oracle plsql stored-procedures ora-01422

2
推荐指数
1
解决办法
133
查看次数

ComboBox显示成员在多个字段上

我正在尝试在C#中设置a的.DisplayMember属性ComboBox,但我想将其绑定到中的多个列.DataSouce

我的SQL看起来像这样:

SELECT PersNbr, PersFirstName, PersMiddleName, PersLastName
FROM Pers WHERE PersNbr = :persNbr;
Run Code Online (Sandbox Code Playgroud)

我将此查询保存在,DataTable因此所选的每个列在中都有其自己的列Datatable

我想将.DisplayMember其组合在一起,PersFirstName + PersMiddleName + PersLastName这样它们的全名看起来像这样:

comboBox.DisplayMemeber = "PersFirstName" + "PersMiddleName" + "PersLastName"
Run Code Online (Sandbox Code Playgroud)

我知道我可以在查询中做到这一点:

SELECT PersNbr, (PersFirstName || PersMiddleName || PersLastName) PersName
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

comboBox.DisplayMember = "PersName";
Run Code Online (Sandbox Code Playgroud)

但是我不想对数据库层中的数据进行格式化,因为它不应该存在。

在Winforms中我还能如何实现呢?

c# data-binding formatting combobox winforms

2
推荐指数
1
解决办法
1214
查看次数

将日期时间设置为晚上 11:59:59

我们有一个应用程序,让用户可以在两个日期之间获取数据。这些日期在 Date 控件中,如果用户想要选择某一天的数据,他们将在两个控件中输入同一天。

这将导致问题,因为.Value这些控件的 设置为午夜12:00 AM。因此,它将尝试查找同一天之间12:00 AM12:00 AM同一天之间的数据。

例如,

DateTime start = fromDate.Value; // 09-07-2018 12:00 AM
DateTime end = toDate.Value; // 09-07-2018 12:00 AM
Run Code Online (Sandbox Code Playgroud)

稍后,我们将调用数据库 where startis:startendis :end

SELECT * FROM Table WHERE Date BETWEEN :start AND :end;
Run Code Online (Sandbox Code Playgroud)

此查询将不返回任何内容,因为午夜和午夜之间没有任何内容。

我们如何设置endto23:59:5911:59:59 PM

c#

1
推荐指数
1
解决办法
1525
查看次数