我应该如何编写我的连接字符串?
How should I write my connection string?
我是 Nhibernate 的新手。我已经使用 NuGet 安装了 NHibernate。
关于NHibernate的教程很多,但是大部分都非常老了(都是用Microsoft VS 2008来呈现的)。来自 TutorialsPoint 的除外。因此,我尝试逐步遵循本教程。这是我的 Program.cs:
class Program
{
static void Main(string[] args)
{
var cfg = new Configuration();
String DataSource = "(localdb)\MSSQLLocalDB";
String InitialCatalog = "TutorialsPointDb";
String IntegratedSecurity = "True";
String ConnectTimeout = "30";
String Encrypt = "False";
String TrustServerCertificate = "False";
String ApplicationIntent = "ReadWrite";
String MultiSubnetFailover = "False";
cfg.DataBaseIntegration(x =>
{
x.ConnectionString = DataSource + InitialCatalog + IntegratedSecurity + ConnectTimeout + Encrypt +
TrustServerCertificate + ApplicationIntent + MultiSubnetFailover;
x.Driver<SqlClientDriver>();
x.Dialect<MsSql2008Dialect>();
});
cfg.AddAssembly(Assembly.GetExecutingAssembly());
var sefact = cfg.BuildSessionFactory();
using (var session = sefact.OpenSession())
{
using (var tx = session.BeginTransaction())
{
var student1 = new Student
{
ID = 1,
FirstMidName = "Allan",
LastName = "Bommer"
};
var student2 = new Student
{
ID = 2,
FirstMidName = "Jerry",
LastName = "Lewis"
};
session.Save(student1);
session.Save(student2);
tx.Commit();
}
Console.ReadLine();
}
}
}
我刚刚引用的这些代码与tutorialspoint的教程几乎相同(解决方案名称不同)。我有这个例外:
System.ArgumentException: Format of the initialization string does not
conform to specification starting at index 0
来自这一行:var sefact = cfg.BuildSessionFactory();
经过研究,据我了解,此异常是由于 ConnectionString
错误引起的。但是我的 x.ConnectionString
与说明完全相同,我无法理解我错过了什么。
而且我知道通常会有一个数据名称:hibernate.cfg.xml
在具有以下设置的解决方案中:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=localdb\mssqllocaldb;Initial Catalog=TutorialsPointDb</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<mapping assembly="DataTransfer"/>
</session-factory>
</hibernate-configuration>
但不在此步骤中:从 NHibernate 创建数据 - 基本 CRUD 操作部分。
所以我的问题是,我错过了什么?我该如何解决这个异常?
感谢您的阅读。
我得到的其他异常:
Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll
Exception thrown: 'System.ArgumentException' in System.Data.dll
Exception thrown: 'System.ArgumentException' in NHibernate.dll
An unhandled exception of type 'System.ArgumentException' occurred in
NHibernate.dll
我的项目中的其他代码,以供您自行检查。
我的数据库:
CREATE TABLE [dbo].[Student]
(
[ID] INT NOT NULL PRIMARY KEY IDENTITY,
[LastName] NVARCHAR(MAX) NULL,
[FirstMidName] NVARCHAR(MAX) NULL
)
这是我的classStudent.cs
namespace TutorialsPoint
{
public class Student
{
public virtual int ID { get; set; }
public virtual string LastName { get; set; }
public virtual string FirstMidName { get; set; }
}
}
及其 Student.hbm.xml 文件
<?xml version = "1.0" encoding = "utf-8" ?>
<hibernate-mapping xmlns = "urn:nhibernate-mapping-2.2"
assembly = "TutorialsPoint" namespace = "TutorialsPoint">
<class name = "Student">
<id name = "ID">
<generator class = "native"/>
</id>
<property name = "LastName"/>
<property name = "FirstMidName"/>
</class>
</hibernate-mapping>
异常
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0
相关语句:
...But my x.ConnectionString is just identical with the instruction and I can not understand that what did I miss...
因为,代码正在声明参数:
String DataSource = "(localdb)\MSSQLLocalDB";
String InitialCatalog = "TutorialsPointDb";
String IntegratedSecurity = "True";
...
不能直接串联
x.ConnectionString = DataSource + InitialCatalog
+ IntegratedSecurity + ConnectTimeout
+ Encrypt + ...
因为这会导致结果:
"(localdb)\MSSQLLocalDBTutorialsPointDbTrue...
但是我们需要这样的东西:
x.ConnectionString = $"DataSource={DataSource};"
+ $"InitialCatalog={InitialCatalog};"
+ $"IntegratedSecurity={IntegratedSecurity}"
+ ...
得到
"DataSource=(localdb)\MSSQLLocalDB;InitialCatalog=TutorialsPointDb;..
这将导致预期的连接字符串格式:
key1=value1;key2=value2;key3=value3;...
我是 Nhibernate 的新手。我已经使用 NuGet 安装了 NHibernate。
关于NHibernate的教程很多,但是大部分都非常老了(都是用Microsoft VS 2008来呈现的)。来自 TutorialsPoint 的除外。因此,我尝试逐步遵循本教程。这是我的 Program.cs:
class Program
{
static void Main(string[] args)
{
var cfg = new Configuration();
String DataSource = "(localdb)\MSSQLLocalDB";
String InitialCatalog = "TutorialsPointDb";
String IntegratedSecurity = "True";
String ConnectTimeout = "30";
String Encrypt = "False";
String TrustServerCertificate = "False";
String ApplicationIntent = "ReadWrite";
String MultiSubnetFailover = "False";
cfg.DataBaseIntegration(x =>
{
x.ConnectionString = DataSource + InitialCatalog + IntegratedSecurity + ConnectTimeout + Encrypt +
TrustServerCertificate + ApplicationIntent + MultiSubnetFailover;
x.Driver<SqlClientDriver>();
x.Dialect<MsSql2008Dialect>();
});
cfg.AddAssembly(Assembly.GetExecutingAssembly());
var sefact = cfg.BuildSessionFactory();
using (var session = sefact.OpenSession())
{
using (var tx = session.BeginTransaction())
{
var student1 = new Student
{
ID = 1,
FirstMidName = "Allan",
LastName = "Bommer"
};
var student2 = new Student
{
ID = 2,
FirstMidName = "Jerry",
LastName = "Lewis"
};
session.Save(student1);
session.Save(student2);
tx.Commit();
}
Console.ReadLine();
}
}
}
我刚刚引用的这些代码与tutorialspoint的教程几乎相同(解决方案名称不同)。我有这个例外:
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0
来自这一行:var sefact = cfg.BuildSessionFactory();
经过研究,据我了解,此异常是由于 ConnectionString
错误引起的。但是我的 x.ConnectionString
与说明完全相同,我无法理解我错过了什么。
而且我知道通常会有一个数据名称:hibernate.cfg.xml
在具有以下设置的解决方案中:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=localdb\mssqllocaldb;Initial Catalog=TutorialsPointDb</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<mapping assembly="DataTransfer"/>
</session-factory>
</hibernate-configuration>
但不在此步骤中:从 NHibernate 创建数据 - 基本 CRUD 操作部分。 所以我的问题是,我错过了什么?我该如何解决这个异常?
感谢您的阅读。
我得到的其他异常:
Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll
Exception thrown: 'System.ArgumentException' in System.Data.dll
Exception thrown: 'System.ArgumentException' in NHibernate.dll
An unhandled exception of type 'System.ArgumentException' occurred in NHibernate.dll
我的项目中的其他代码,以供您自行检查。 我的数据库:
CREATE TABLE [dbo].[Student]
(
[ID] INT NOT NULL PRIMARY KEY IDENTITY,
[LastName] NVARCHAR(MAX) NULL,
[FirstMidName] NVARCHAR(MAX) NULL
)
这是我的classStudent.cs
namespace TutorialsPoint
{
public class Student
{
public virtual int ID { get; set; }
public virtual string LastName { get; set; }
public virtual string FirstMidName { get; set; }
}
}
及其 Student.hbm.xml 文件
<?xml version = "1.0" encoding = "utf-8" ?>
<hibernate-mapping xmlns = "urn:nhibernate-mapping-2.2"
assembly = "TutorialsPoint" namespace = "TutorialsPoint">
<class name = "Student">
<id name = "ID">
<generator class = "native"/>
</id>
<property name = "LastName"/>
<property name = "FirstMidName"/>
</class>
</hibernate-mapping>
异常
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0
相关语句:
...But my x.ConnectionString is just identical with the instruction and I can not understand that what did I miss...
因为,代码正在声明参数:
String DataSource = "(localdb)\MSSQLLocalDB";
String InitialCatalog = "TutorialsPointDb";
String IntegratedSecurity = "True";
...
不能直接串联
x.ConnectionString = DataSource + InitialCatalog
+ IntegratedSecurity + ConnectTimeout
+ Encrypt + ...
因为这会导致结果:
"(localdb)\MSSQLLocalDBTutorialsPointDbTrue...
但是我们需要这样的东西:
x.ConnectionString = $"DataSource={DataSource};"
+ $"InitialCatalog={InitialCatalog};"
+ $"IntegratedSecurity={IntegratedSecurity}"
+ ...
得到
"DataSource=(localdb)\MSSQLLocalDB;InitialCatalog=TutorialsPointDb;..
这将导致预期的连接字符串格式:
key1=value1;key2=value2;key3=value3;...