Tag: .net 2.0

在Using语句中从DataLayer返回DataReader

我们有很多数据层代码遵循这个非常通用的模式: public DataTable GetSomeData(string filter) { string sql = “SELECT * FROM [SomeTable] WHERE SomeColumn= @Filter”; DataTable result = new DataTable(); using (SqlConnection cn = new SqlConnection(GetConnectionString())) using (SqlCommand cmd = new SqlCommand(sql, cn)) { cmd.Parameters.Add(“@Filter”, SqlDbType.NVarChar, 255).Value = filter; result.Load(cmd.ExecuteReader()); } return result; } 我想我们可以做得更好一点。 我现在的主要抱怨是它强制将所有记录加载到内存中,即使对于大型集合也是如此。 我希望能够利用DataReader的能力,一次只能在ram中保留一条记录,但如果我直接返回DataReader,则在离开using块时会切断连接。 如何改进这一点以允许一次返回一行?

从插件模块中读取dll.config(不是app.config!)

我正在编写一个C#.NET 2.0 .dll,它是一个大型应用程序的插件。 我的模块的visual studio项目有一个app.config文件,该文件被复制到MyProj.dll旁边的MyProj.dll.config。 计划是在部署.dll之后编辑MyProj.dll.config。 我试图从修改后的本地文件中读取我的设置。 我试图拉出LocalFilesSettingsObject并将其应用程序名称更改为我的.dll,如下所示: Properties.Settings config = Properties.Settings.Default; SettingsContext context = config.Context; SettingsPropertyCollection properties = config.Properties; SettingsProviderCollection providers = config.Providers; SettingsProvider configFile = Properties.Settings.Default.Providers[“LocalFileSettingsProvider”]; configFile.ApplicationName = Assembly.GetExecutingAssembly().GetName().Name; config.Initialize(context, properties, providers); config.Reload(); 那不行。 我正在努力绕过整个.NET设置混乱。 我想要一个配方来完成这个任务。 我还想要一个关于如何在.NET 2.0中使用设置的清晰解释(带有示例)的链接

DataTable到JSON

我最近需要将数据表序列化为JSON。 我在哪里我们仍然在.Net 2.0,所以我不能在.Net 3.5中使用JSON序列化器。 我认为这之前一定是这样做的,所以我去网上寻找并找到了许多 不同的 选择 。 其中一些依赖于一个额外的库,我将很难在这里推进。 其他人需要先转换为List<Dictionary> ,这看起来有点尴尬和不必要。 另一个处理所有值,如字符串。 出于这样或那样的原因,我无法真正落后于他们,所以我决定推出自己的,我发布在下面。 正如您从阅读//TODO评论中看到的那样,它在一些地方不完整。 这段代码已在此处生产,因此它在基本意义上“起作用”。 它不完整的地方是我们知道我们的生产数据当前不会达到它的地方(数据库中没有时间跨度或字节数组)。 我在这里发帖的原因是我觉得这可能会好一点,我希望能帮助完成和改进这段代码。 欢迎任何投入。 请注意,此function内置于.Net 3.5及更高版本中,因此今天使用此代码的唯一原因是,您仍然只能使用.Net 2.0。 即便如此,JSON.Net已成为此类事物的goto库。 public static class JSONHelper { public static string FromDataTable(DataTable dt) { string rowDelimiter = “”; StringBuilder result = new StringBuilder(“[“); foreach (DataRow row in dt.Rows) { result.Append(rowDelimiter); result.Append(FromDataRow(row)); rowDelimiter = “,”; } result.Append(“]”); […]

ClickOnce和IsolatedStorage

Winform应用程序在我们的Intranet中使用ClickOnce发布。 我们在隔离存储中存储GUI的个人偏好。 一切都很好:) 问题是当我们有一个新版本的应用程序时,我们发布…所有偏好都丢失了! 用户需要在每个版本上重复设置他们的首选项。 有没有办法冻结整个应用程序的隔离而不是版本?

Control.AddRange(…)很慢

项目:我有一个父面板,它包含一个ComboBox和FlowLayoutPanel。 FlowLayoutPanel包含可变数量的子面板(inheritance自UserControl的自定义控件)。 每个子面板包含一些标签,两个ComboBox,一个按钮和一个带有3个ComboBox列和一个按钮列的DataGridView。 DataGridView可能有1-6行。 当从父面板上的ComboBox中选择一个项目时,FlowLayoutPanel将填充子面板。 问题:使用大约50个子面板填充FlowLayoutPanel大约需要2.5秒。 具体来说,我已经确定对FlowLayoutPanel.Controls.AddRange()的调用是罪魁祸首。 相关代码:我不能在这里发布我的所有代码(代码太多,部分内容是保密的),但我会尽力解释发生了什么。 家长小组: private void displayInformation(Suite suite) { this.SuspendLayout(); // Get dependencies. List dependents = new List(suite.dependencies.Keys); dependents.Sort(SuiteRange.Compare); // Create a ChildPanel for each dependent. List rangePanels = new List(); foreach (SuiteRange dependent in dependents) { ChildPanel sdp = new ChildPanel(); sdp.initialize(initialSuite.name, dataAccess); sdp.displayInformation(dependent, suite.dependencies[dependent]); rangePanels.Add(sdp); } // Put […]

我可以在.NET 2.0或3.0中使用扩展方法和LINQ吗?

当我尝试使用.NET 2.0或3.0运行时添加扩展方法时,我收到错误: 无法定义新的扩展方法,因为无法找到编译器所需的类型“System.Runtime.CompilerServices.ExtensionAttribute”。 您是否缺少对System.Core.dll的引用? 但是当我尝试将它添加到项目中时,我无法在可用引用列表中找到System.Core。 我需要做什么才能在我的项目中使用扩展方法和LINQ on?

在另一个窗口内停靠窗口

我有一个winform应用程序(.NET 2.0 C#)。 从这个应用程序,我想启动另一个进程(另一个winform应用程序)并将其停靠到我的窗口(或至少让它看起来像停靠)。 到目前为止,我只能找到有关对接控件的信息,而不是单独进程中的窗口。 我的第一个想法是获取窗口的句柄并使用非托管系统调用将窗口的高度/宽度和位置设置到我的停靠区域。 但在我开始之前,我想检查一下你们中是否有人做过类似的事情。 我可以访问我想要停靠的应用程序的源代码,但如果可以避免它,我宁愿不做任何更改。 我对父应用程序的完整编程控制。 任何建议? 提前致谢!

Registry Watcher C#

我是WMI的新手,我需要在C#服务中实现RegistryValueChangeEvent 。 我需要一个事件处理程序,每次更改一组注册表值时都会触发该事件处理程序。 我想要的行为类似于FileSystemWatcher类的Changed事件,但是对于注册表值。 如果我可以使用其他一些技术来完成相同的任务,我也会很感激。 我的最低要求是它比我现在的解决方案更好:每20秒轮询一次,并将注册表值与最后结果进行比较。 请在答案中提供示例代码。 如果我只能看一个注册表值的示例,那就没问题了。 我需要一个.Net 2.0的解决方案 谢谢。

如何在运行时创建任意Array类型的实例?

我正在尝试在编译时反序列化未知类型的数组。 在运行时我发现了类型,但我不知道如何创建实例。 就像是: Object o = Activator.CreateInstance(type); 这是行不通的,因为没有无参数构造函数,Array似乎没有任何构造函数。

Casting List – 协方差/逆变问题

给出以下类型: public interface IMyClass { } public class MyClass : IMyClass { } 我想知道如何将List转换为List ? 关于协方差/逆变主题,我并不完全清楚,但据我所知,由于这个原因,我不能仅仅清楚地列出清单。 我只能提出这个微不足道的解决方案; 缺乏优雅,浪费资源: … public List ConvertItems(List input) { var result = new List(input.Count); foreach (var item in input) { result.Add(item); } return result; } …. 你怎么能以更优雅/高效的方式解决它? ( 请注意,我需要.NET 2.0解决方案,但为了完整性,我也很高兴看到使用更新框架版本的更优雅的解决方案。 )