我试图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) 我正在尝试根据为我们的测试应用程序提供给我们的规格表使用 C# 签署一些 XML。我们必须:
这就是我目前所拥有的。
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) 我正在使用反射并遇到错误:
System.Reflection.TargetException:对象与目标类型不匹配
因为我认为那只Type.GetMember(string)会返回一个MemberInfo,但它没有。
我很好奇为什么Type.GetMember(string)返回的原因MemberInfo[]。其他反射方法喜欢Type.GetProperty()并Type.GetMethod()返回它们各自的PropetyInfo和MethodInfo对象。
当其他反射方法没有Type.GetMember()返回数组的目的是什么MemberInfo[]?
我有这个过程,它只是根据一个被调用的列字段删除一行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.
到底是怎么回事?
我正在尝试在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中我还能如何实现呢?
我们有一个应用程序,让用户可以在两个日期之间获取数据。这些日期在 Date 控件中,如果用户想要选择某一天的数据,他们将在两个控件中输入同一天。
这将导致问题,因为.Value这些控件的 设置为午夜12:00 AM。因此,它将尝试查找同一天之间12:00 AM和12: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:start和endis :end。
SELECT * FROM Table WHERE Date BETWEEN :start AND :end;
Run Code Online (Sandbox Code Playgroud)
此查询将不返回任何内容,因为午夜和午夜之间没有任何内容。
我们如何设置endto23:59:59或11:59:59 PM?
c# ×5
.net ×2
oracle ×2
combobox ×1
cryptography ×1
data-binding ×1
formatting ×1
odp.net ×1
ora-01422 ×1
plsql ×1
reflection ×1
signing ×1
sql ×1
winforms ×1
xml ×1