在我的情况下,我该如何设置 Silverlight 到 MySQL 的数据管道?

     2023-04-12     207

关键词:

【中文标题】在我的情况下,我该如何设置 Silverlight 到 MySQL 的数据管道?【英文标题】:How might I set up data plumbing for Silverlight to MySQL in my situation? 【发布时间】:2009-11-24 14:55:07 【问题描述】:

简而言之:设置从 Silverlight 到 MySQL 数据库的只读数据访问的好方法是什么?


以下是我的情况的详细信息:

我目前正在尝试设置 Silverlight 应用程序来呈现来自 MySQL 数据库的数据。目前,我需要设置对 MySQL 数据库的只读访问权限(我可能会设置其他表以在以后完成CRUD 功能,但对于这些特定表,我' m 只关心 retrieve 方面)。

我tried setting it up using RIA Services (CTP July 2009) with Entity Framework,但我had trouble debugging it 并最终以trying to recompile the source code from the MySQL ADO.NET connector 为install custom DLLs into the GAC。我无法让这些东西正常工作。

我的问题是我的许多 MySQL 表中的日期值都存储为 0000-00-00。 MySQL ADO.NET 连接器每次尝试删除其中包含无效日期的行时都会引发异常。我会尝试重新编译连接器(参见上面的链接),但这感觉很像黑客。我会尝试将 MySQL 数据库中的值更新为 within the appropriate spec for dates,但我们的 IT 经理(实际上是我们的 DBA)不想这样做。

我不介意学习使用 LINQ(LINQ-to-what?),但我想避免连接我自己的 SQL 命令字符串。由于日期限制,我需要一种方法为几乎每个日期实例指定Case When orders.OrderDate = '0000-00-00' Then '0001-01-01' Else orders.OrderDate End

我特别想听听一起使用 .NET 和 MySQL 的人的来信。在我的情况下什么会起作用?

【问题讨论】:

您可以尝试在连接字符串中设置 zeroDateTimeBehavior=convertToNull。这将为所有无效(即 0000-00-00)日期发送一个空值。 我相信选项是允许零日期时间 (dev.mysql.com/doc/refman/5.0/en/…)。我以前试过这个,但它不起作用。我认为连接器仍然会抛出异常。 如果我是你,我会写一个后端来代理数据库中的数据。 或者您可以使用现有的轻量级 ORM 并节省一些时间。 Subsonic 使用起来真的非常简单。 【参考方案1】:

为什么没有人建议使用 ORM 来隐藏 mySQL 详细信息? NHibernate 和 Subsonic 都支持 mySQL。两者在如何与数据库交互方面都非常可定制,并且应该允许您处理格式错误的日期。

通过使用 ORM,您的数据对象现在是 POCO,您可以使用任何您想要的方式将数据发送到 Silverlight 客户端。 Vanilla Web 服务或 WCF 应该没问题。如果您想尝试最前沿的 RIA 服务。

恕我直言,这将比设置 mysql->php->xml->asp.net->silverlight 链更简单。

【讨论】:

【参考方案2】:

我的问题是我的许多 MySQL 表中的日期值都存储为 0000-00-00。

您可以在 SQL 查询中只写 Select NullIf( SomeDate, '0000-00-00') As SomeDate From SomeTable 吗?我不知道 MySQL,但这就是我会在 T-SQL 中做的事情。

【讨论】:

如果我直接写SQL,我可能会做类似的事情,比如CASE WHEN SomeDate = '0000-00-00' Then '1901-01-01' Else SomeDate End As SomeDate。但是,我的问题是设置管道,以便我直接执行 SQL,但仍然可以根据需要灵活地输入上面的 CASE 语句。 你能把你的表包装在视图中吗?如果是这样,那将有效地清理您的数据,而不会强迫您以特定方式编写 SQL。 这不是一个坏建议,但我刚刚对其进行了测试,在尝试使用 SQL 语句的Where 部分中的数据字段时性能很糟糕。我想这是因为必须先评估视图中的 CASE 语句,然后才能针对视图的结果数据集运行查询。无论哪种方式,相差 31 毫秒和 3078 毫秒。 哇,真糟糕。放弃并使用定期从真实数据库批量加载的 SQL Express 副本怎么样?【参考方案3】:

这是我为遇到的类似问题所做的。

我使用 php 从 MySQL 数据库中获取数据并将其转换为 XML 文件。我从我的 silverlight 应用程序中调用了该文件,并使用 LINQtoXML 解析数据并使其在我的 XAML 控件中可用。我不是贸易程序员,所以也许有更好的方法可以做到这一点,但这适用于我的应用程序。希望这可以帮助。林克摇滚!

下面是部分代码:

< ?php

header("Content-type: text/xml");

$grb_hostname = "host";
$grb_database = "dbName";
$grb_username = "dbUser";
$grb_password = "dbPwd";
$grb = mysql_connect($grb_hostname, $grb_username, $grb_password); 

mysql_select_db($grb_database, $grb);

$results = mysql_query("SELECT * FROM bursts ORDER BY bursts.id DESC");

$xmlOutput = "<?xml version=\"1.0\"?>\n"; 
$xmlOutput .= "<grbs>\n";

while($row = mysql_fetch_array($results)) 
    $xmlOutput .= "\t<grb id=\"".$row['id']."\" trigger=\"".$row['trigger']."\">\n";
    $xmlOutput .= "\t\t<grb_id>".$row['grb_id']."</grb_id>\n";
    $xmlOutput .= "\t\t<burst_ra>".$row['burst_ra']."</burst_ra>\n";
    $xmlOutput .= "\t\t<burst_dec>".$row['burst_dec']."</burst_dec>\n";
    $xmlOutput .= "\t</grb>\n";

$xmlOutput .= ""; // 前面没有空格/

回显$xml输出;

?>

然后在我的 Silverlight 中,我有以下内容:

private void LoadGrbs()

    

        WebClient grbXmlFile = new WebClient();

        // Make sure the crossdomainpolicy.xml file exists on the remote server.
        grbXmlFile.DownloadStringAsync(new Uri("url_xml_generating_php_file", UriKind.Absolute));
        grbXmlFile.DownloadStringCompleted += new DownloadStringCompletedEventHandler(grbsXmlLoaded);
    

    private void grbsXmlLoaded(object sender, DownloadStringCompletedEventArgs e)
    
        processGrbXml(e.Result);
    

    private void processGrbXml(string grbData)
    
        XDocument grbs = XDocument.Parse(grbData);

        var query = from g in grbs.Descendants("grb")
                    select new
                        
                            grbId = (string)g.Element("grb_id"),
                            grbDec = (string)g.Element("burst_dec")
                        ;

        foreach (var grb in query)
        
            grbListbox.Items.Add(grb.grbId);
        

    

grbListbox 是我 Silverlight 应用程序中的一个列表框控件。

【讨论】:

您可以向您的 Silverlight 应用添加验证码以检查不正确的日期。 感谢您的建议,并喜欢您创造性地使用 Linq to XML。但是,我试图避免对涉及SELECT * FROM ... 的服务器进行查询。尽管 XML 格式的数据更“可解析”,但在开始解析它们之前,我必须下载数十万条记录。这将花费太多时间。【参考方案4】:

您应该使用 RIA 服务,最新版本于上周发布,现在已包含在 silverlight 4 测试版中。

http://silverlight.net/getstarted/silverlight-4-beta/

您不必将实体框架与 RIA 一起使用,还有其他选项。我们有,但我们使用 SQL Server,所以这可能不是您最喜欢的。

他们已经更改了新 RIA Stuff 中的一些错误,所以我建议您再看看。这是上周布拉德艾布拉姆斯的例子:

http://microsoftpdc.com/Sessions/CL21

最后,如果您在调试时遇到很多麻烦,您可以看看 Fiddler。这是一个监视流量的程序,它可以以更明显的方式向您显示您遇到的错误。

【讨论】:

感谢您的建议。我将再看一下带有 beta 4 的 RIA 服务。但是,我仍然需要找到 域数据源和 MySQL DB 之间的链接。在此过程中,我仍然必须能够解释无效日期。 我还应该注意:实体框架和 RIA 服务与 SQL Server 一起工作非常好,因为它们都是 Microsoft 产品。但是,它们不能很好地与 MySQL 配合使用,尤其是当 MySQL 数据存在问题时。我很想能够使用 RIA 服务,但如果我觉得我正在破解它以使其工作,它可能不是最好的解决方案。 微软一直在强调 RIA 服务(或 WCF RIA 服务)应该很好地处理非实体的东西。如果您查看 Colin Blair 的博客:riaservicesblog.com/Blog 他谈到了他如何不喜欢域数据源,并建议(在我看来)更好的方法。你真的更多地在玩你的数据上下文。有一个关于使用 RIA 和 NHibernate 而不是 Entity 的视频,你也可以看看。我认为就是这样:microsoftpdc.com/Sessions/CL07 为什么这个答案应该投反对票?它对你有什么影响?

默认情况下在我的 android 应用中启用所有通知设置

】默认情况下在我的android应用中启用所有通知设置【英文标题】:Enableallnotificationsettingsbydefaultinmyandroidapp【发布时间】:2019-06-2615:48:57【问题描述】:有什么方法可以在我的应用安装后默认启用所有通知设置?用户正在接收通... 查看详情

如何模拟EntityManager?

...【问题描述】:我需要模拟实体管理器以使测试服务层(在我的情况下是会话外观)独立于底层(在我的情况下是实体管理器)。那么我该如何实现呢?我应该使用dbunit吗?我需要easy/j(Mock)吗?【问题讨论】:【参考方案1】:... 查看详情

如何在我的情况下导入库 MouseKeyHook?

】如何在我的情况下导入库MouseKeyHook?【英文标题】:howtoimportalibraryinmycaseMouseKeyHook?【发布时间】:2020-07-3115:15:41【问题描述】:我刚开始用c#编程,但我不知道如何导入库。我的程序中需要"globalmousekeyhook"。有人可以帮... 查看详情

在我的情况下如何动态更改 HTML 元素?

】在我的情况下如何动态更改HTML元素?【英文标题】:HowtochangetheHTMLelementsdynamicallyinmycase?【发布时间】:2011-10-3015:16:57【问题描述】:我的页面上有一组单选按钮:<form...><inputtype="radio"name="people"checked>Student<inputtype="... 查看详情

在我的情况下如何使用动态名称访问资源?

】在我的情况下如何使用动态名称访问资源?【英文标题】:Howtoaccessresourcewithdynamicnameinmycase?【发布时间】:2011-09-2820:33:27【问题描述】:如果我将图像名称作为变量获取,如下所示:varimageName=SERVICE.getImg();那我怎么获取R.drawab... 查看详情

在我的情况下如何访问我的 json 数据 - swift

】在我的情况下如何访问我的json数据-swift【英文标题】:Howtoaccessmyjsondatainmycase-swift【发布时间】:2017-04-2708:01:52【问题描述】:我有以下通过网络服务发送给我的子字符串。我正在尝试访问其中的字典,但出现错误。请问有人... 查看详情

在我的情况下,如何在 Oracle 中编写 SQL?

】在我的情况下,如何在Oracle中编写SQL?【英文标题】:HowcanIwriteSQLinOracleinmycase?【发布时间】:2015-11-2306:07:36【问题描述】:所以,这里是表格-createtableperson(idnumber,namevarchar2(50));createtableinjury_place(idnumber,placevarchar2(50));createtable... 查看详情

在我的情况下,如何以编程方式在另一个上面显示一个布局?(代码片段)

我的主要布局main.xml只包含两个LinearLayouts:第一届LinearLayout主持一个VideoView和一个Button,第二个LinearLayout主持一个EditText,这个LinearLayout将能见度值设置为“GONE”(android:visibility="gone")如下:<LinearLayoutxmlns:android="http://schem 查看详情

如何在springsecurity中获取用户名(在我的情况下是电子邮件)[userdetails/string]

我想在我的应用程序中收到用户名的电子邮件,以设置发送邮件的用户。我决定使用典型的方法,即principal和getUsername():@PostMapping("/messages/{id}")@ResponseStatus(HttpStatus.CREATED)publicMessageDTOaddOneMessage(@RequestBodyMessageRequestmessageRequ 查看详情

在我的情况下如何更新 <select> 选项?

】在我的情况下如何更新<select>选项?【英文标题】:Howtoupdate<select>optionsinmycase?【发布时间】:2011-08-0913:01:30【问题描述】:我有一个选择字段和一个按钮:<selectid="mylist"></select><inputtype="button"id="btn"value="upd... 查看详情

如何在我的特定情况下形成嵌套数组的数组?

】如何在我的特定情况下形成嵌套数组的数组?【英文标题】:Howtoformanarrayofnestedarraysinmyspecificcase?【发布时间】:2021-09-0719:41:47【问题描述】:我有一个特定的用例,我想将一个数组中的所有对象组合成一个新数组。所以我在... 查看详情

如何在我的情况下使用 jQuery 隐藏和显示?

】如何在我的情况下使用jQuery隐藏和显示?【英文标题】:HowtohideandshowinmycaseusingjQuery?【发布时间】:2011-08-2302:54:18【问题描述】:我是jQuery的新手。我有一个index.html页面,<body><divid="content"></body>我想要页面加载... 查看详情

如何在不实际删除行的情况下明显折叠 Silverlight 4 ListBox 中的单行?

】如何在不实际删除行的情况下明显折叠Silverlight4ListBox中的单行?【英文标题】:HowcanIvisiblycollapseasinglerowinaSilverlight4ListBoxwithoutactuallyremovingtherow?【发布时间】:2011-09-1011:25:13【问题描述】:在C#和Silverlight4中工作时,我正在使... 查看详情

在我的情况下,如何正确获取 scrollView 的 contentSize、zoomScale 和 contentOffset?

】在我的情况下,如何正确获取scrollView的contentSize、zoomScale和contentOffset?【英文标题】:HowtogetthecontentSize,zoomScaleandcontentOffsetofscrollViewproperlyinmycase?【发布时间】:2015-06-0816:04:55【问题描述】:我有以下情况:包含imageView的滚动... 查看详情

在我的情况下,如何使用批处理文件脚本制作数组列表?

】在我的情况下,如何使用批处理文件脚本制作数组列表?【英文标题】:HowtomakearraylistinmycaseusingBatchFileScript?【发布时间】:2022-01-1307:11:21【问题描述】:我想将文件从一个文件夹复制到本地网络中的多台电脑。我想在下面的... 查看详情

在我的情况下使用 LayoutInflater 时如何删除旧内容并显示新内容?

】在我的情况下使用LayoutInflater时如何删除旧内容并显示新内容?【英文标题】:HowtoremoveoldcontentandshownewcontentwhenusingLayoutInflaterinmycase?【发布时间】:2011-10-0320:30:55【问题描述】:我的ma​​in.xml布局仅包含两个按钮和一个内容... 查看详情

在我的情况下,如何编写自定义 CrudRepository 方法(@Query)来过滤结果

】在我的情况下,如何编写自定义CrudRepository方法(@Query)来过滤结果【英文标题】:HowtowriteacustomCrudRepositorymethod(@Query)tofiltertheresultinmycase【发布时间】:2015-09-0614:54:03【问题描述】:我是SpringJPA和Repository的新手。我有一个包... 查看详情

如何解决svn:E195019:在我的情况下检测到重定向周期?

】如何解决svn:E195019:在我的情况下检测到重定向周期?【英文标题】:Howtosolvesvn:E195019:Redirectcycledetected,inmycase?【发布时间】:2014-05-0202:36:04【问题描述】:我知道还有其他看起来相同的问题,但我找不到任何对我的确切情况... 查看详情