了解连接字符串atrributes

本文关键字:atrributes 字符串 连接 了解 | 更新日期: 2023-09-27 18:23:53

我是C#和.net的新手。我正在尝试使用测试控制台应用程序测试我的Nhibernate配置。

这是我的测试控制台应用

class Program
{
    static void Main(string[] args)
    {
        try
        {
            NHibernateBase NHB = new NHibernateBase();
            NHB.Initialize("NHibernate.GuitarStore");
            System.Console.WriteLine("NHibernate.GuitarStore assembly initialized.");
            System.Console.ReadLine();
        }
        catch (Exception ex)
        {
            string Message = ex.Message;
            if (ex.InnerException != null)
            {
                Message += " - InnerExcepetion: " + ex.InnerException.Message;
             }
        System.Console.WriteLine();
        System.Console.WriteLine("***** ERROR *****");
        System.Console.WriteLine(Message);
        System.Console.WriteLine();
        System.Console.ReadLine();
        }
        }
    }

当我运行上述程序时,我得到错误:

***** ERROR *****
Login failed for user 'BUGZILLA'Silon'.

这是我的app.config 中的连接字符串

connectionString="Data Source=localhost;Initial Catalog=myGuitarStore;Integrated Security=True

我认为这与连接字符串的集成安全部分有关。

问题是我不理解连接字符串中的属性(及其含义),而且我似乎找不到任何一篇足够容易地表达它们的文章。

----如果你需要它来理解问题,这里有NHibernateBase类

 public class NHibernateBase
{
    private static Configuration Configuration { get; set; }
    protected static ISessionFactory SessionFactory { get; set; }
    private static ISession session = null;
    private static IStatelessSession statelessSession = null;
    public static Configuration ConfigureNHibernate(string assembly)
    {
        Configuration = new Configuration();
        Configuration.AddAssembly(assembly);
        return Configuration;
    }
    public void Initialize(string assembly)
    {
        Configuration = ConfigureNHibernate(assembly);
        SessionFactory = Configuration.BuildSessionFactory();
    }
    public static ISession Session
    {
        get
        {
            if (session == null)
            {
                session = SessionFactory.OpenSession();
            }
            return session;
        }
    }
    public static IStatelessSession StatelessSession
    {
        get
        {
            if (statelessSession == null)
            {
                statelessSession = SessionFactory.OpenStatelessSession();
            }
            return statelessSession;
        }
    }
    public IList<T> ExecuteICriteria<T>()
    {
        using (ITransaction transaction = Session.BeginTransaction())
        {
            try
            {
                IList<T> result = Session.CreateCriteria(typeof(T)).List<T>();
                transaction.Commit();
                return result;
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
        }
    }

了解连接字符串atrributes

Integrated Security=True只是意味着您使用Windows身份验证进行身份验证,而不是通过sql server本身传递用户id和密码并进行身份验证。如果您不进行windows身份验证,那么您可以简单地将用户id和密码作为连接字符串的一部分进行传递,请参阅ConnectionStrings.com了解其他有效的连接字符串格式化程序。

您还可以看到MSDN的这篇文章,它描述了每个连接字符串属性

连接到数据库的方式(即Windows身份验证与SQL Server身份验证)通常在连接字符串中指定。现在,您正在尝试连接运行您的应用程序的用户的Windows凭据(没有密码)。我认为您最好先阅读SQL Server提供的安全选项,然后再阅读连接字符串。你需要知道你的数据库是如何设置的,以便为它创建一个有效的连接字符串

以下是MSDN的链接,其中包含有关SQL Server安全设置的一些信息;http://msdn.microsoft.com/en-us/library/bsz5788z(v=vs.100).aspx

此外,请考虑如何连接MSSMS;您提供哪些凭据?你在哪个域?你使用Windows身份验证吗?如果你能弄清楚如何在那里连接,你就可以很容易地创建一个以相同方式连接的连接字符串——只需找到一个示例并用适当的值编辑它。

由于不包括usernamepassword,连接字符串在尝试连接到数据库时传递当前登录用户的凭据。确保Bugzilla'silon可以访问您试图使用nHibernate查询的表。

否则,您可以使用username=password=密钥在连接字符串中提供SQL Server登录帐户(与AD登录不同)。