小编Sco*_*her的帖子

将SQL保存在存储过程与代码中的优缺点是什么

在您的C#源代码或存储过程中保留SQL有哪些优点/缺点?我一直在与一位朋友讨论我们正在开发的一个开源项目(C#ASP.NET论坛).目前,大多数数据库访问都是通过在C#中构建SQL内联并调用SQL Server DB来完成的.所以我试图确定哪个特定项目最好.

到目前为止,我有:

代码中的优点:

  • 易于维护 - 无需运行SQL脚本来更新查询
  • 更容易移植到另一个数据库 - 没有移动到端口

存储过程的优点:

  • 性能
  • 安全

c# sql sql-server stored-procedures

274
推荐指数
17
解决办法
7万
查看次数

Reflection.Net:如何加载依赖项?

我尝试使用Reflection向我的Windows.Net应用程序添加一个插件系统; 但是当有依赖关系的插件时它会失败.

Addon类必须实现一个接口'IAddon'并拥有一个空构造函数.
主程序使用Reflection加载插件:

Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\Addon.dll");
Type t = assembly.GetType("Test.MyAddon");
ConstructorInfo ctor = t.GetConstructor(new Type[] { });
IAddon addon= (IAddon) ctor.Invoke(new object[] { });
addon.StartAddon();
Run Code Online (Sandbox Code Playgroud)

当addon不使用dependencie时,它工作得很好.但是如果我的插件引用并使用另一个在磁盘上的插件附近保存的DLL(C:\ Temp\TestAddon\MyTools.dll),则会失败:
System.IO.FileNotFoundException:无法加载文件或程序集'MyTools.dll '或其中一个依赖项.

我不想在我的可执行文件附近复制插件DLL,我怎么能告诉.Net运行时在"C:\ Temp\TestAddon"中搜索任何依赖?

请注意添加

Assembly assembly = Assembly.LoadFile(@"C:\Temp\TestAddon\MyTools.dll");
Run Code Online (Sandbox Code Playgroud)

不要改变任何东西.

c# reflection dependencies add-on

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

TIBCO EMS故障转移重新连接C#(TIBCO.EMS.dll)

我们有一个TIBCO EMS解决方案,它在2-4服务器环境中使用内置服务器故障转移.如果TIBCO管理员将故障转移服务从一个EMS服务器转移到另一个EMS服务器,则应该在EMS服务级别自动将连接转移到新服务器.对于使用EMS服务的C#应用​​程序,这种情况不会发生 - 我们的用户连接在故障转移后没有转移到新服务器,我们不确定原因.

我们的应用程序仅在启动时连接到EMS,因此如果TIBCO管理员在用户启动应用程序后进行故障转移,则用户需要重新启动应用程序才能重新连接到新服务器(我们的EMS连接使用包含所有4个生产EMS服务器的服务器字符串 - 如果第一次尝试失败,它将移动到字符串中的下一个服务器并再次尝试).

我正在寻找一种自动化方法,如果检测到连接已经死亡,我会定期尝试重新连接到EMS,但我不确定如何最好地做到这一点.

有任何想法吗?我们正在使用TIBCO.EMS.dll版本4.4.2和.Net 2.x(SmartClient应用程序)

任何帮助,将不胜感激.

c# tibco ems tibco-ems

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

Settings.Default.<property>始终返回默认值而不是持久存储中的值(XML文件)

我最近在C#(.Net 2.0)中编写了一个DLL,其中包含一个需要IP地址的类.我的同事改变了类以从".dll.config"(XML)文件中检索IP - 这显然是由他创建的"应用程序设置"文件(Settings1.settings)自动生成的.这样做的好处是允许最终用户随意更改XML/config文件中的IP地址.

不幸的是,当我从树中检查他的代码并尝试编译(或使用)这个新代码时,任何调用此DLL的应用程序只获取默认值,而不是文件中的值.

调用配置文件的构造函数如下所示:

    public class form : System.Windows.Forms.Form
    {
        public form()
        {
            // This call is required by the Windows Form Designer.
            InitializeComponent();
            IP = IPAddress.Parse(Settings1.Default.IPAddress);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在MSDN论坛上找到了对此问题的引用,用户说:

"旧"值(您在开发时定义的值)是硬编码的.如果franework无法访问或打开配置文件,它将使用默认值.如果您在dll中使用设置,这将始终发生.

  1. 这是否意味着我无法在配置文件中存储DLL的外部值?(我的同事以某种方式完成了这项工作......)

  2. 由于我的框架似乎无法访问或打开配置文件,我该如何找出它失败的原因?甚至可以检测到何时发生?

德克尔:这有点帮助.不幸的是,我正在将此DLL写入规范,因此我实际上无法访问应用程序的配置文件.如上所述,我的同事创建了"Settings 1 .settings"文件.我当时并不理解这一点,但现在似乎添加"1"会使其超出任何调用它的应用程序的设置空间.

我想我想弄清楚的是为什么DLL似乎没有找到位于同一目录旁边的配置文件.通过代码逐步跟踪不会显示任何内容.

顺便说一句,我可以将程序集的"输出类型"从"类库"更改为"Windows应用程序",并在我的DLL代码的开头添加以下行:

    [STAThread]
    public static void Main(string[] args)
    {
        System.Windows.Forms.Application.Run(new form());
    }
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它会生成一个不同的配置文件(".exe.config"),我可以改变它并从文件中提取新数据.所以我有点困惑.有任何想法吗?

.net c# dll application-settings

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

如何在SQL查询中使用Oracle关联数组

ODP.Net公开了将关联数组作为参数传递到C#的Oracle存储过程的能力.除非您尝试在sql查询中使用该关联数组中包含的数据,否则它是一个很好的功能.

原因是它需要上下文切换 - SQL语句需要SQL类型,并且传递到PL/SQL的关联数组实际上定义为PL/SQL类型.我相信在PL/SQL包/过程/函数中定义的任何类型都是PL/SQL类型,而在这些对象之外创建的类型是SQL类型(如果你可以提供更清晰的,请做但不是这个目标)题).

所以,问题是,您将使用什么方法将PL/SQL关联数组参数转换为可以在sql语句中使用的过程中的内容,如下所示:

OPEN refCursor FOR
SELECT T.*
FROM   SOME_TABLE T,
       ( SELECT COLUMN_VALUE V
         FROM   TABLE( associativeArray )
       ) T2
WHERE  T.NAME = T2.V;
Run Code Online (Sandbox Code Playgroud)

出于此示例的目的,"associativeArray"是由PLS_INTEGER索引的varchar2(200)的简单表.在C#中,associativeArry参数填充了字符串[].

除了使用关联数组之外,请随意讨论其他方法,但提前知道这些解决方案将不被接受.不过,我有兴趣看到其他选择.

sql oracle plsql associative-array odp.net

8
推荐指数
1
解决办法
3万
查看次数

如何将SharePoint 2007功能挂钩到站点的Application_Start中?

我想知道在开发功能时是否有一种很好的方法可以挂钩到SharePoint 2007网站的Application_Start?我知道我可以直接编辑站点根目录中的Global.asax文件,但有没有办法实现这一点,以便它与该功能一起部署?

谢谢!

sharepoint sharepoint-2007 application-start global-asax

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

重启PC时,C#.Net exe不会关闭,导致机器不能重启

我们有一个内置在C#中的SmartClient,当它正在重新启动运行的PC时,它仍然保持打开状态.这将暂停重新启动过程,除非用户首先关闭SmartClient或进行其他一些手动干预.

当基础架构团队远程安装需要重新启动计算机的新软件时,这会导致问题.

让SmartClient应用程序从Windows识别关闭/重启事件并优雅地自杀的任何想法?

更新: 这是一个具有多个gui线程的高度线程化应用程序.是的,多个gui线程.它实际上是许多项目的整合,它们本身可以是独立的应用程序 - 所有这些都是从单个exe启动和管理的,这些exe集中了这些管理方法并跟踪这些线程.我不相信使用后台线程是一种选择.

c# events multithreading restart smartclient

5
推荐指数
3
解决办法
1015
查看次数

在VS.Net 2005中调试时断点没有连接

最近遇到了这个问题...在VS.Net 2005中调试应用程序时,断点未连接.错误表示编译的代码与正在运行的版本不同,因此存在导致断点断开的不匹配.

清理所有bin文件的解决方案并重新编译没有帮助.不仅仅发生在一个盒子或人身上.

添加注意:此​​解决方案位于TFS for Source Control中.如果我删除我的本地TFS存储库并从头开始从源代码控制中获取它,那么问题就会消失.我也试过卸载并重新安装Visual Studio.这也有时候有所帮助.这两个人在某些时候工作的事实表明问题不是直接引起的.

c# debugging visual-studio-2005 breakpoints

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

Oracle Analytics - sql查询的分区和排序

在回答另一个用户的问题(TheSoftwareJedi)时出现了这个问题 ......

鉴于下表:

ROW_PRIORITY   COL1     COL2    COL3
0              0.1      100     <NULL>
12             <NULL>   <NULL>  3
24             0.2      <NULL>  <NULL>
Run Code Online (Sandbox Code Playgroud)

以及以下查询:

select  'B' METRIC, ROW_PRIORITY,
        last_value(col1 ignore nulls) over (ORDER BY ROW_PRIORITY) col1,
        last_value(col2 ignore nulls) over (ORDER BY ROW_PRIORITY) col2,
        last_value(col3 ignore nulls) over (ORDER BY ROW_PRIORITY) col3
from    (SELECT * FROM ZTEST);
Run Code Online (Sandbox Code Playgroud)

我得到这些结果:

METRIC  ROW_PRIORITY    COL1    COL2    COL3
B            0          0.1     100     <NULL>
B           12          0.1     100     3
B           24          0.2     100     3
Run Code Online (Sandbox Code Playgroud)

预期:

METRIC  ROW_PRIORITY …
Run Code Online (Sandbox Code Playgroud)

oracle analytic-functions

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

通过DBLINK引用Oracle用户定义的类型?

我在两个不同的Oracle实例上使用两个不同的Oracle模式.我已经定义了几种类型和类型集合来在这些模式之间传输数据.我遇到的问题是,即使类型具有完全相同的定义(用于在模式中创建两个集的相同脚本),Oracle将它们视为不可互换的不同对象.

我想将传入的远程类型对象转换为相同的本地类型,但是我得到一个关于跨dblinks引用类型的错误.

基本上,我正在做以下事情:

DECLARE
  MyType  LocalType; -- note, same definition as the RemoteType (same script)
BEGIN
  REMOTE_SCHEMA.PACKAGE.PROCEDURE@DBLINK( MyType );  -- MyType is an OUT param
  LOCAL_SCHEMA.PACKAGE.PROCEDURE( MyType ); -- IN param
END;
Run Code Online (Sandbox Code Playgroud)

这失败是因为REMOTE过程调用无法理解MyType,因为它将LocalType和RemoteType视为不同的对象类型.

我也尝试了DECLARING MyType,如下所示:

  MyType REMOTE_SCHEMA.RemoteType@DBLINK;
Run Code Online (Sandbox Code Playgroud)

但我得到另一个关于跨dblinks引用类型的错误.类型之间的CASTing也不起作用,因为为了进行强制转换,我需要跨dblink引用远程类型 - 同样的问题,同样的错误.我也尝试使用SYS.ANYDATA作为在两个实例之间穿过的对象,但它得到了类似的错误.

有任何想法吗?

更新: 尝试使用相同的OID(使用手动检索SYS_OP_GUID())在DBLINK的两侧声明对象类型,但Oracle仍然"看到"两个对象不同并抛出"错误数量或类型的争论"错误.

oracle collections types dblink

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