首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight 5: ComToolKit错误

Silverlight 5: ComToolKit错误
EN

Stack Overflow用户
提问于 2014-08-22 17:00:05
回答 2查看 95关注 0票数 1

我正在编写一项要求,即平板电脑需要将照片和元数据一起存储在本地数据库中,因为我们的码头工作人员在我们码头的某些区域没有网络连接,我们需要能够将照片和附加数据存储到其平板上的sqlexpress db中。

我试图使用ComToolKit从silverlight访问本地sqlexpress数据库,并在这一行代码中遇到一个运行时错误:

代码语言:javascript
复制
using (var connection = new ComToolkit.Data.AdoConnection(connectionString))

错误:

System.TypeLoadException未被用户代码Message=Could处理,而不是从程序集'System.Windows、Version=5.0.5.0、Culture=neutral、PublicKeyToken=7cec85d7bea7798e‘加载类型'System.Windows.Interop.ComAutomationFactory’。

StackTrace:

代码语言:javascript
复制
   at ComToolkit.Data.AdoConnection..ctor(String connectionString)
   at SilverlightApplication1.MainPage.PopPrograms()
   at SilverlightApplication1.MainPage..ctor()
   at SilverlightApplication1.App.Application_Startup(Object sender, StartupEventArgs e)
   at MS.Internal.CoreInvokeHandler.InvokeEventHandler(UInt32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
   at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)

我将使用语句更改为:

代码语言:javascript
复制
using System.Windows.Interop;

改为:

代码语言:javascript
复制
using System.Runtime.InteropServices.Automation;

但我还是有问题。这里有熟悉Silverlight和ComToolKit的吗?

参考链接http://beyondrelational.com/modules/2/blogs/117/posts/14645/access-a-local-sql-compact-database-from-silverlight-4.aspx

EN

回答 2

Stack Overflow用户

发布于 2014-08-23 02:12:47

如果您愿意容忍一点ComToolkit和一些糟糕的性能,那么您可以在不使用dynamic的情况下做到这一点。

当然,由于您使用的是COM,因此需要使用提升的权限运行。

下面的示例代码在后台工作人员中运行查询。这是必要的,因为查询可能很慢,这样可以避免在查询仍在运行时冻结UI。

代码语言:javascript
复制
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        FetchData();
    }

    private void FetchData()
    {
        List<Site> sites = new List<Site>();

        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += (s, e2) =>
        {
            dynamic conn = AutomationFactory.CreateObject("ADODB.Connection");
            conn.ConnectionString =
                @"Provider=sqloledb;
              Data Source=.\SQLEXPRESS;
              Initial Catalog=SamDb;
              Integrated Security=SSPI";
            conn.Open();

            dynamic recordSet = conn.Execute("SELECT SiteId, SiteName FROM Sites");
            recordSet.MoveNext();
            while (!recordSet.EOF)
            {

                string siteName = (string)recordSet.Fields.Item(1).Value;
                short siteId = (short)recordSet.Fields.Item(0).Value;

                sites.Add(new Site(SiteId: siteId, SiteName: siteName));

                recordSet.MoveNext();
            }
        };

        worker.RunWorkerCompleted += (s, e2) =>
        {
            this.ListSites.ItemsSource = sites;
        };

        worker.RunWorkerAsync();
    }
票数 1
EN

Stack Overflow用户

发布于 2014-08-22 17:25:41

IIRC Silverlight应该在一个相当高的安全沙箱中运行,并且对客户端计算机上的服务(如COM和数据库)的访问权限非常有限。

Visual中的大多数Silverlight项目模板还创建了一个服务器端项目,Silverlight客户端可以与其对话;数据库访问将发生在服务器上。我相当肯定像DataSet这样的类不能在Silverlight客户端中使用,所以我认为您在这里走错了方向。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25452118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档