乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 89|回复: 4

使用带有C#AutoCAD插件的SQL Server Compact Edition

[复制链接]

5

主题

14

帖子

1

银币

初来乍到

Rank: 1

铜币
34
发表于 2020-2-24 12:52:30 | 显示全部楼层 |阅读模式
嗨,我最近试图设置一个SQL Server Compact Edition连接到我的AutoCAD插件。我的目标是有一个数据库对象,我将使用我的插件进行部署,这样我就不必在要部署到的每台计算机上安装MS SQL Server。我当前的设置是使用实体框架的代码优先 ADO.net,最初,我试图做以下事情: 。
public MyDbContext() : base(“name=MyContextString”)。
{。
}。

上面的代码给了我一个错误,即连接字符串不存在于 App.config 文件中。我发现一个帖子说,因为我正在开发一个插件。Acad.exe从Acad.exe.config读取,而不是从我的App.Config读取。一个解决方案是改变acad.exe.config,但我希望有一个解决方案,我可以在其中使用代码中的提供者名称设置连接字符串。是否有人有 SQL Compact Edition 数据库的基于代码的数据库配置的工作示例?。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2020-2-25 00:43:54 | 显示全部楼层
我认为女士弃用favou的精简版
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2020-2-25 11:40:57 | 显示全部楼层
我和MikeD一起使用SQLite而不是SQL Compact,但你仍然会遇到同样的问题(从app.config加载连接字符串)。虽然在 .NET 外接程序 DLL 项目中可以添加 app.config 文件,但如果没有特殊代码,使用 System.Configurations.ConfigurationManager 的代码将无法读取 DLL 项目的 app.config 中的配置数据(其生成输出应为 [外接程序名称].dll.config)。在早期的 .NET (1.x) 中,DLL 的 app.config 中的所有配置内容都应合并到加载 DLL 的 EXE 应用的 app.config 中。在AutoCAD中,即Acad.exe.config。所以,是的,您可以将 DLL 的 app.config 合并到 acad.exe.config 中。但是,对于后来的.NET(我不记得从什么时候开始,2.x或3.x?),您可以以某种方式直接在dll的*.dll.config中加载配置,唯一作为System.Configuration.Configuration.AppSettings。例如,在 DLL 的 app.config 中,可以添加 appSettings,如:
  1.   
  2.    
  3.    
  4.   
  5.   
  6.    
  7.   
生成项目时,获取 [外接程序名称].dll.config,将其放在与 DLL 相同的文件夹中。你可以有这样的代码来加载设置:private void LoadSettings(out string dbName, out string fileName)。
{。
dbName=“”;。
文件名=“”;。

配置配置 = 空;。
字符串 exeConfigPath = this,GetType().组装.位置;。
尝试。
{。
config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);。
}。
捕获(异常例)。
{。
throw new System.IO.FileFormatException(。
$“正在加载配置错误:{例如,消息}“);。
}。

if (config != null)。
{。
dbName = config,AppSettings.Settings[MyDBName].价值;。
文件名 = 配置,AppSettings.Settings[MyDBFileName].价值;。
}。
还。
{。
抛出新的无效程序异常(。
“无效的 *.dll.confg 文件,。
}。
}。
如果设置基于每个用户,则还可以简单地在项目>资源>设置中添加设置,然后在用户范围中添加设置。然后,您只需使用Properties.Settings.Default.xxxxx 加载设置(确保在代码首次运行时为其提供默认值,并在某个时刻保存设置)。呵呵。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2020-2-26 01:18:10 | 显示全部楼层
++对于作为嵌入式服务器的SQLite,我从来没有用。NET,非常适合C++项目。
在C/C++中,您不需要提供程序或连接字符串,因此一旦您的项目构建完成,您就不必担心Microsoft会搞乱它。
也就是说,目前大多数机器上都安装了express,但我从未尝试过。
此外,您试图存储什么?如果只是像系统变量这样的数据,使用序列化可能会更好
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2020-2-26 17:33:10 | 显示全部楼层
明确支持SQLite。NET,我用它与实体框架和https://github.com/msallin/SQLiteCodeFirst在tvCAD和我也用它与原始SQL使用https://www.nuget.org/profiles/SQLite的东西。它重量轻,速度快,效果好。我只会去SQL Express,如果你需要一个客户端-服务器的东西,SQLite是我100%的桌面应用程序数据库。不要指望它会出现在任何最终用户的电脑上。我从来不用它。
我发现Entity Framework也很有性能,但是如果你想优化它,你可以关闭对读取查询的跟踪。这并不难,很多人以前都做过,并记录了他们的旅行。使用Entity Framework + SQLite的模式迁移可能很棘手,关键是要完全避免内置的EF迁移和DIY。如果你们中的任何人需要帮助,请联系我——我已经度过了那场风暴。
EF+SQLite的配置通常在插件DLL的配置中,我实际上使用类属性进行设置,因为我的应用程序需要为不同的项目更改数据库。
使用DLL设置的另一种方法是通过属性。默认的静态类,当你添加设置到你的项目时生成(在Visual Studio的项目属性区域),这是我使用的一个,因为它们是每用户的。
要查看/编辑SQLite数据库,请尝试https://sqlitebrowser.org/和LinqPad。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 06:45 , Processed in 0.277143 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表