使用ADO.NET实体数据模型,如何传递(或设置)连接字符串密码?

时间:2009-10-01 13:40:09

标签: c# asp.net-mvc ado.net

我正在使用ADO.NET实体数据模型来处理我正在进行的这个项目。通常我会在web.config中包含整个连接字符串(用户和密码),但我今天早上感觉很活泼,所以我决定从连接字符串中排除密码。对我来说不幸的是,在操作数据库之前,我似乎无法弄清楚如何传递或设置密码,到目前为止我所做的所有搜索都没有产生任何富有成效的结果。我目前所有的几行都增加了新记录:

_entities.AddToUploadSet(uploadFile);
_entities.SaveChanges();

我看到ConnectionString中有_entities.Connection个属性,但我找不到像密码属性那样有用的东西。

任何人都可以帮助我吗?谢谢!

修改

为了澄清,此屏幕截图显示了我可以选择是否在web.config文件中包含密码的步骤:

alt text

正如您所看到的,我需要在提示建议的应用程序代码中设置它。

3 个答案:

答案 0 :(得分:1)

好吧,我做了一些挖掘,并用管道录制了这个解决方案:

private static string CreateNewConnectionString(string connectionName, string password)
{
    var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~").ConnectionStrings.ConnectionStrings[connectionName];
    var split = config.ConnectionString.Split(Convert.ToChar(";"));
    var sb = new System.Text.StringBuilder();

    for (var i = 0; i <= (split.Length - 1); i++)
    {
        if (split[i].ToLower().Contains("user id"))
        {
            split[i] += ";Password=" + password;
        }

        if (i < (split.Length - 1))
        {
            sb.AppendFormat("{0};", split[i]);
        }
        else
        {
            sb.Append(split[i]);
        }
    }
    return sb.ToString();
}

当然,这不是最漂亮的方法,但它完成了工作。我传递一个连接字符串名称和密码,它返回一个更新的连接字符串和密码。这就是我实现它的方式:

_entities = new UploadEntity(CreateNewConnectionString("UploadEntity", "[removed]"));
_entities.AddToUploadSet(uploadFile);
_entities.SaveChanges();

答案 1 :(得分:1)

答案 2 :(得分:0)

在你的web.config中会有一个类似这样的条目:

  <connectionStrings>
    <add name="HelpEntities" connectionString="metadata=res://*/Models.HelpModel.HelpModel.csdl|res://*/Models.HelpModel.HelpModel.ssdl|res://*/Models.HelpModel.HelpModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(local);Initial Catalog=XXX;Integrated Security=True;MultipleActiveResultSets=True&quot;"
      providerName="System.Data.EntityClient" />
  </connectionStrings>

上面的示例使用集成安全性,但可以使用用户名和密码。