【问题标题】:System.ArgumentException: 'Keyword not supported: 'metadata' [duplicate]System.ArgumentException:'关键字不支持:'元数据'[重复]
【发布时间】:2018-02-15 14:54:03
【问题描述】:

我已经搜索了几个小时,最接近修复它的是找到this 解决方案,但我似乎无法让它在我的项目中工作。

我正在尝试上传 .CSV 文件并将 .CSV 文件的内容添加到我的数据库中。 (我正在使用本地数据库)。当我上传文件时出现错误

System.ArgumentException: '不支持关键字:'元数据'。

从我提供的链接中的答案来看,问题是因为“您传递的字符串不是有效的数据库连接字符串,它是一个 EF 连接字符串,在其提供程序连接字符串参数中包含 SQL Server 连接字符串。”但我不确定如何解决这个问题。

我的连接字符串是:

<add name="MyDatabaseEntities" connectionString="metadata=res://*/Models.MyModel.csdl|res://*/Models.MyModel.ssdl|res://*/Models.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MyDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

这是我试图连接到数据库的控制器中的代码

    string conString = ConfigurationManager.ConnectionStrings
    ["MyDatabaseEntities"].ConnectionString;
    using (SqlConnection con = new SqlConnection(conString))
    {
    using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
    {
    //Set the database table name.
    sqlBulkCopy.DestinationTableName = "dbo.Orders"; 

谁能告诉我如何解决这个问题,非常感谢任何帮助。

【问题讨论】:

  • 跟 MySQL 有什么关系?
  • 更准确地说,它是 edmx 文件的 EF 数据库第一个连接字符串。你可以去掉所有的“metadata=...”,里面有一个普通的编码连接字符串。
  • 链接的答案告诉你错误的含义。要修复它,您需要为您的数据库提供有效的连接。网络上对此进行了广泛的介绍。
  • @StephenKennedy 你是否建议删除“metadata=res://*/Models.MyModel.csdl|res://*/Models.MyModel.ssdl|res://*/Models.MyModel .msl;provider=System.Data.SqlClient;provider" 来自现有的连接字符串?

标签: c# .net sql-server ado.net


【解决方案1】:

只需将新的连接字符串添加到您的 web.config 使用

<add name="SqlConnectionString" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MyDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" />

使用新的连接字符串。

string conString = ConfigurationManager.ConnectionStrings
    ["SqlConnectionString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(conString))
    {
    using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
    {
    //Set the database table name.
    sqlBulkCopy.DestinationTableName = "dbo.Orders"; 

【讨论】:

  • 我要删除连接字符串中“数据源=”之前的所有内容吗?
  • @BrightLight “数据源”之前的所有内容都是与 EF 相关的元数据,如果您想使用带有常规 SqlConnection 而不是 EF 的连接,则需要将其删除。只需将我的答案中的字符串用作新的连接字符串并在构建 SqlConnection 对象时引用它
  • 好的,我已将连接字符串更改为 &lt;add name="MyDatabaseEntities" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\MyDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" /&gt;,但现在 Web 应用程序中的登录功能已停止工作。当我尝试登录时,我收到错误System.InvalidOperationException: 'The connection string 'MyDatabaseEntities' in the application's configuration file does not contain the required providerName attribute.。知道如何解决这个问题吗?
  • 这是我收到错误var v = dc.Users.Where(a =&gt; a.EmailID == login.EmailID).FirstOrDefault(); 的地方
  • @BrightLight 不,不要更改现有连接,而是使用新名称创建一个新连接!在 SqlConnection 构造函数中使用这个新的连接字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多