我正在研究遗留软件系统,我的任务是将一些旧的COM组件迁移到.NET 3.5.COM组件最初在MTS中托管,然后在组件服务中托管.在.NET端口中,我们使用ADO.NET事务处理事务,因此方法签名有所改变.
我面临的困境是参数顺序.每种方法都要求您传递SqlConnection或SqlTransaction(取决于方法是否更新数据库).当然,有些方法可以用不同的参数调用.例如:
Keyword.Load(string description, SqlTransaction transaction)
Run Code Online (Sandbox Code Playgroud)
- 要么 -
Keyword.Load(string description, string tag, SqlTransaction transaction)
Run Code Online (Sandbox Code Playgroud)
现在,框架中提供多个重载的大多数方法都如下所示:
A(int arg1)
A(int arg1, string arg2)
A(int arg1, string arg2, DateTime arg3)
Run Code Online (Sandbox Code Playgroud)
值得注意的是,尽管存在过载,参数顺序仍然一致.但是,我真的想强调用户传递连接或事务的要求.通常,这些是指定的最后一个参数.但在我看来,放置它们的最佳位置是参数0:
A(SqlTransaction transaction)
A(SqlTransaction transaction, int arg1)
Run Code Online (Sandbox Code Playgroud)
不幸的是,在这种情况下,在过载的声明中既没有连接也没有事务,并为您创建一个:
// These overloads create a connection, open it, and start a new transaction.
A()
A(int arg1)
A(int arg1, string arg2)
A(int arg1, string arg2)
A(int arg1, string arg2, DateTime arg3)
// These overloads require that the transaction be passed in, so that the …Run Code Online (Sandbox Code Playgroud) 我创建了一个包,其中包含我计划从单独的应用程序调用的存储过程.存储过程将返回架构中所有视图和表的排序列表.为此,它对DBA_TABLES和DBA_VIEWS同义词执行简单选择,如下所示:
CREATE OR REPLACE
PACKAGE BODY TITAN_ENTITY AS
PROCEDURE GETSCHEMAOBJECTS (RESULTS IN OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
OPEN V_CURSOR FOR
SELECT 'T' OBJECTTYPE, TABLE_NAME OBJECTNAME
FROM DBA_TABLES
WHERE OWNER = 'SONAR5'
UNION ALL
SELECT 'V' OBJECTTYPE, VIEW_NAME OBJECTNAME
FROM DBA_VIEWS
WHERE OWNER = 'SONAR5'
ORDER BY OBJECTNAME;
RESULTS := V_CURSOR;
END GETSCHEMAOBJECTS;
END TITAN_ENTITY;
Run Code Online (Sandbox Code Playgroud)
我已经确认有问题的同义词存在,并且是公开的:
CREATE PUBLIC SYNONYM "DBA_TABLES" FOR "SYS"."DBA_TABLES"
CREATE PUBLIC SYNONYM "DBA_VIEWS" FOR "SYS"."DBA_VIEWS"
Run Code Online (Sandbox Code Playgroud)
我的理解是,因为它们是公开的,所以我不需要任何进一步的权限来获取它们.如果这种理解不正确,我希望有人能够理解这个概念并指出我更准确的数据.
现在这是我的问题:我可以在Oracle SQL Developer中打开一个工作表,并从这些表中选择就好了.我得到了有意义的数据(567行,事实上).但是当我尝试执行存储过程时,Oracle会抱怨编译错误,如下所示:
Error(9,8): PL/SQL: SQL Statement ignored
Error(10,16): PL/SQL: ORA-00942: …Run Code Online (Sandbox Code Playgroud) 我不相信Silver Bullet,但我真的喜欢使用序列或自动编号标识列作为数据库表的主键列.它们是唯一的,它们索引很好,我不必担心空值.
另一方面,在某些情况下,当表中的其他唯一列可以用于相同目的时,它们似乎是多余的.比如说,您正在构建一个将9位邮政编码映射到城市区域的表格.邮政编码字段也可以正常工作(前提是您可以保证数据格式且不重复值).
要点:我和我们任何人的经历都是有限的.还有哪些真实的例子让人们选择不使用自动编号列作为表的主键,为什么?
这对我来说是一种"开阔视野"的东西,我希望从那些曾经使用过多数据库并有令人信服的理由选择其他人的人那里学到一点.
我正在尝试使用LINQ迭代DataTable中的行,并从列值中实例化对象.棘手的代码如下所示.
问题是代码甚至不会编译.恶意错误消息是"无法解析符号选择".
我很满意DataRowCollection实现IEnumerable(它从System.Data.InternalDataCollectionBase获取),所以你会认为以下没有问题(显然,我错了).
我在我的项目中包含了System.Linq System.Data和System.Data.SqlClient.它还具有所有必要的参考.我之前在整个应用程序中一直使用LINQ(主要是POCO和XDocuemnts列表),这是我第一次看到这个特定的消息.
关于如何解决它的任何建议?
using (var command = connection.CreateCommand())
{
command.CommandText = "dbo.sp_pTicklerContacts_sel_W_ContactRole_by_ComKey";
command.CommandTimeout = 120;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@iComKey", SqlDbType.Int).Value = companyKey;
using (var adapter = new SqlDataAdapter(command))
{
var dataset = new DataSet();
adapter.Fill(dataset);
if (dataset.TableCount() > 0 && dataset.Tables[0].Rows.Count > 0)
{
return (from row in dataset.Tables[0].Rows
select new TicklerContact
{
CompanyKey = row.ToInt32("iTicklerContact"),
Contact = row.ToString("ccontact"),
ContactKey = row.ToInt32("iconkey"),
TicklerContactKey = row.ToInt32("iTicklerContactKey"),
Role = row.ToString("contactrole"),
Exists = row.ToBool("contactexists")
}).ToList();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud) (免责声明:以下两种情况都不正确:(1)Java是我的专长,(2)我是插件开发的专家.)
我的Eclipse插件项目包含5个插件.其中2个编译得很好.不包括在类依赖的3 org.eclipse.swt.widgets或org.eclipse.swt.graphics包.(非常烦人的)编译时错误消息是:
The type org.eclipse.swt.widgets.Control cannot be resolved.
It is indirectly referenced from required .class files.
Run Code Online (Sandbox Code Playgroud)
现在,我用一把细齿梳子在这个工作区上.我已检查并重新检查以下内容:
我用谷歌搜索并堆叠溢出,直到我的眼睛流血.没有一个典型的建议似乎有所帮助.
但我确信,通常的事实将证明是这样的.(在所有条件相同的情况下,答案通常都是简单,愚蠢,而且非常明显.)
有人可以建议一些我尚未看过的东西吗?我非常愿意提供您可能需要的任何信息.
PS我可能会注意到,有办法太多的地方寻找到配置插件的依赖?伟大的googly moogly.
我们经常使用Excel对TFS中的数据进行批量更新。直到最近,Team Foundation 插件都运行良好。然而,它已经开始在几个方面失败:
它将连接到服务器,但尝试连接到任何项目都会导致 Excel 崩溃,并在 Windows 应用程序事件日志中生成 Watson 报告。
如果我重新启动 Excel,它会报告填充程序和加载项都遇到问题,并提出禁用它。如果我不禁用它,我仍然无法连接到项目。
最终,该加载项完全拒绝加载,直到我使用“选项”对话框手动将 COM 加载项添加回应用程序中。这样做会产生相同的结果(Excel 在尝试加载项目时崩溃)。
我已采取以下步骤来尝试解决该问题:
这些都没有解决该问题。
有谁知道如何解决这个问题?
PS如果这不是这个问题的正确“堆栈”,请指出我在交易所上正确的“堆栈”。谢谢。
我们有一个ActiveX组件,它通过SHDocVw在Internet Explorer窗口中显示一个Web页面.在DocumentComplete事件处理程序中,我们尝试从页面上的一个控件中检索值.我们知道控件在页面上(通过Fiddler跟踪可见).
在这一点上,事情变得不稳定.我们在运行时收到以下错误消息:
Error Message:
Public member 'elements' on type 'DBNull' not found.
Error Routine Location:
at Microsoft.VisualBasic.CompilerServices.Symbols.Container.GetMembers(String& MemberName, Boolean ReportErrors)
at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)
at Foo.AddinModule.m_internetExplorer_DownloadComplete(Object pDisp, Object& url)
Error Source:
Microsoft.VisualBasic
Error Site Location:
System.Reflection.MemberInfo[] GetMembers(System.String ByRef, Boolean)
Run Code Online (Sandbox Code Playgroud)
令人讨厌的代码行是这样的:
Me.IEInstance.Document.forms("frmRedirect").elements("redirectData").Value = outlookXML.OuterXml
Run Code Online (Sandbox Code Playgroud)
所以,基本上,Me.IEInstance.Document.forms("frmRedirect")正在评估DBNull.
我们已经消除了区分大小写的问题.尝试在页面内移动控件,并验证HTML格式正确.我不知道为什么会这样.下面是生成的HTML的示例.
任何人都可以提出这个问题的原因和可能的解决方案吗?我现在正在接受任何和所有的建议.
HTML示例
<form id='frmRedirect' name='frmRedirect' action='pw_outlook/choosecontacts.aspx' method='POST'>
<input type='hidden' name='redirectData'>
</form>
Run Code Online (Sandbox Code Playgroud)
更新2012年3月28日
我们已经确定代码在某些配置下工作正常.然后,神秘的是,如果您更改代码,它将成功为一些用户,如下所示: …
我有一个用Oracle 9i(版本9.2.0.4.0)编写的简单函数来模拟内联IF.对于那些感兴趣的人,这里是代码:
create or replace
FUNCTION IIF
(testExpression NUMBER,
trueResult NUMBER,
falseResult NUMBER)
RETURN NUMBER
AS
BEGIN
/*
A simple in-line IF function for use with SQL queries. If the test
expression evaluates to any non-zero value, it is considered to be
true, and the trueResult is returned. Otherwise, falseResult is
returned.
*/
IF (testExpression is null) or (testExpression = 0) THEN
return falseResult;
ELSE
return trueResult;
END IF;
END IIF;
Run Code Online (Sandbox Code Playgroud)
这不是火箭科学.现在,这是一个很大的谜团:如果我执行以下SQL语句,一切都很好,并且完全符合我的预期:
SELECT IIF(1, 'true', 'false') FROM DUAL;
SELECT IIF(0, …Run Code Online (Sandbox Code Playgroud) 好的,所以我有一个 .NET 控制台应用程序,它的 Main 方法包含在 Program 类中。你知道,通常的:
class Program
{
static void Main(string[] args)
{
// Do something spectactular
}
}
Run Code Online (Sandbox Code Playgroud)
自从我开始如此严格地使用 StyleCop 和 FxCop 以来,我对确保所有内容都正确记录变得有点挑剔。
然后它击中了我。我完全不知道如何正确记录 Program 和 Program.Main。
我想,从长远来看,您可以采用以下方法:
/// <summary>
/// Encapsulates the application's main entry point.
/// </summary>
class Program
{
/// <summary>
/// The application's main entry point.
/// </summary>
static void Main(string[] args)
{
// Do something spectactular
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎严重不足(尽管我的 Main 例程总是委托给其他类来完成这项工作)。
你们是如何记录这些事情的?有推荐或标准吗?
我在我的网站上发生了一个javascript错误,我很确定我知道为什么,但我不知道如何解决它!
这是错误:
Uncaught TypeError: Cannot call method 'split' of null
Run Code Online (Sandbox Code Playgroud)
这是我的JS代码:
$(function(e) {
if (document.cookie.indexOf("login") >= 0) {
$("a#loggedInUser").html( $.cookie("login").split("|")[0] );
}
});
Run Code Online (Sandbox Code Playgroud)
我只是想显示存储在"登录"cookie中的用户名.现在,我很确定错误是因为返回的值有时不是字符串,然后它没有split方法,因此它会导致此错误.
我该如何解决这个问题?有任何想法吗?
谢谢!