我是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
我认为它与连接字符串的Integrated Security部分有关。
问题是我不理解连接字符串中的属性(及其含义),我似乎无法找到任何足以让它们容易扩展的文章。
----以防你需要它来理解这个问题,这里是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;
}
}
}
答案 0 :(得分:2)
Integrated Security=True
只是意味着您使用Windows身份验证进行身份验证,而不是传递您的用户ID和密码,并通过sql server本身进行身份验证。如果您没有进行Windows身份验证,那么您只需将用户ID和密码作为连接字符串的一部分传递,有关其他连接字符串格式,请参阅ConnectionStrings.com。
您还可以看到这篇描述每个连接字符串属性的MSDN文章
答案 1 :(得分:1)
您连接到数据库的方式(即Windows身份验证与SQL Server身份验证)通常在连接字符串中指定。现在,您正在尝试连接正在运行您的应用程序的用户的Windows信用(并且没有密码)。我想你最好先阅读有关SQL Server必须提供的安全选项,然后阅读连接字符串。您需要知道如何设置数据库以便为其创建有效的连接字符串。
以下是MSDN的链接,其中包含有关SQL Server安全设置的一些信息; http://msdn.microsoft.com/en-us/library/bsz5788z(v=vs.100).aspx
另外,请考虑如何与MSSMS连接;你提供什么证书?你在哪个领域?你使用Windows Auth吗?如果您可以弄清楚如何连接那里,您可以轻松创建一个连接字符串,以相同的方式连接 - 只需查找示例并使用适当的值进行编辑。
答案 2 :(得分:0)
连接字符串由于未包含username
和password
,因此在尝试连接数据库时会传递当前登录用户的凭据。确保Bugzilla\silon
可以访问您尝试使用nHibernate查询的表。
否则,您可以使用username=
和password=
密钥在连接字符串中提供SQL Server登录帐户(与AD登录名不同)。