You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC导入Excel至数据库时遇SqlConnection 'metadata'不支持错误

解决“Keyword not supported: 'metadata'”错误

这个问题我太熟了——你犯了一个非常常见的小失误:你把Entity Framework专用的实体连接字符串直接传给了SqlConnection,但SqlConnection只认纯ADO.NET的数据库连接字符串,完全不认识带metadata的EF连接串,这就是报错的根源。

问题拆解

你从ConfigurationManager.ConnectionStrings["RéceptionEntities"]拿到的连接串格式大概是这样的:

metadata=res://*/Models.MyModel.csdl|res://*/Models.MyModel.ssdl|res://*/Models.MyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=...;initial catalog=...;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"

这里的metadata部分是EF用来映射实体模型的专属配置,SqlConnection根本不识别这个关键字,自然会抛出ArgumentException。

具体解决方案

1. 在配置文件中新增纯ADO.NET连接串

打开你的Web.config或App.config,找到<connectionStrings>节点,在原有EF连接串的基础上,添加一个不带metadata的纯数据库连接串:

<connectionStrings>
  <!-- 原有的EF实体连接串 -->
  <add name="RéceptionEntities" connectionString="metadata=..." providerName="System.Data.EntityClient" />
  <!-- 新增的纯ADO.NET连接串 -->
  <add name="RéceptionADO" connectionString="data source=你的数据库服务器名;initial catalog=Réception;integrated security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>

2. 修改代码使用新连接串

把代码里获取连接串的逻辑换成新的纯ADO.NET连接串:

for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
{
    // 改用纯ADO.NET连接串
    string conn = ConfigurationManager.ConnectionStrings["RéceptionADO"].ConnectionString;
    SqlConnection con = new SqlConnection(conn);
    string query = "Insert into Réception_camions(Date_d_arrivée,heure_...";
    // 后续执行逻辑...
}

额外优化建议

  • 别在循环里反复创建SqlConnection,建议把连接对象的创建移到循环外,并用using语句自动释放资源,避免连接泄漏:
    string conn = ConfigurationManager.ConnectionStrings["RéceptionADO"].ConnectionString;
    using (SqlConnection con = new SqlConnection(conn))
    {
        con.Open();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
        {
            string query = "Insert into Réception_camions(Date_d_arrivée,heure_...";
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                // 设置参数、执行命令
                cmd.ExecuteNonQuery();
            }
        }
    }
    
  • 尽量用参数化查询代替直接拼接SQL,既能防止SQL注入,也能避免日期、特殊字符串的格式问题。

内容的提问来源于stack exchange,提问作者M.LOOK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:47:16