我有一个DAL类库,它作为DLL包含在我的程序中.以下行来自DAL以初始化连接.
DataSet ds = new DataSet("table");
SqlConnection cnn = new SqlConnection(Settings.CMOSQLConn);
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到以下错误:
An unhandled exception of type 'System.StackOverflowException' occurred in CMO.DAL.dll
Run Code Online (Sandbox Code Playgroud)
以下是在Settings.Designer.cs文件中,它在get调用中显示错误:
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=WWCSTAGE;Initial Catalog=CMO;Persist Security Info=True;User ID=CMOWe" +
"bService;Password=ecivreSbeWOMC")]
public static string CMOSQLConn {
get {
return (CMOSQLConn);
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法的想法?是因为连接字符串存储在dll而不是我的主应用程序中?我真的很坚持这一点,非常感谢任何帮助!
我在下面尝试了格雷格的建议:
public static string CMOSQLConn {
get {
return (Settings.CMOSQLConn);
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误...还有更多想法吗?谢谢到目前为止!
所以我按照下面重新设置文件的建议,现在我的设置文件看起来像这样 - >
public string CMOSQLConn {
get {
return ((string)(this["CMOSQLConn"]));
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,现在我不会编译这个语句 - > …
例如,我有两个类:Foo和Bar.这些类映射到一些表.
至于现在,我为每个类都有静态方法:Add,Update,Delete,Get.
E.g.:
public class Foo
{
private Guid _id;
private string _someProperty;
static Foo Get(Guid id);
static void Add(Foo foo);
static void Update(Foo foo);
static void Delete(Foo foo);
}
Run Code Online (Sandbox Code Playgroud)
所以,当我需要用我的对象做smth时我会这样说:
Foo foo = Foo.Get(id);
Foo newfoo = new Foo();
Foo.Add(newfoo);
Foo.Update(newfoo);
Foo.Delete(newfoo);
Run Code Online (Sandbox Code Playgroud)
这是一个好方法吗?如果不是,我应该使用什么方法来访问数据?
谢谢
我并不完全相信三层架构的好处.那么,为什么LINQ出现了,这是一种更轻便的数据访问方法?任何输入将不胜感激.
我正在为ado.net寻找数据访问层.我对linq,EF,NHibernate或任何其他ORM不感兴趣.目前,我正在使用umbraco的数据访问层.DAL非常好但他们停止开发它所以我正在寻找另一个.有谁知道我在哪里可以找到我可以测试的DAL列表?
我正在尝试使用PetaPoco为ASP.NET Web表单项目生成我的DAL层.
Namespace Eva.Dal.Polls
Public Partial Class EVAMOD_PL_CategoryDb
Private db As Eva.Dal.Core.EvaDb
Public Function Insert(a As EVAMOD_PL_Category) As Object
Return db.Insert(a)
End Function
Public Sub New()
db = New Eva.Dal.Core.EvaDb
End Sub
End Class
Public Partial Class EVAMOD_PL_GL_CategoryDb
Private db As Eva.Dal.Core.EvaDb
Public Function Insert(a As EVAMOD_PL_GL_Category) As Object
Return db.Insert(a)
End Function
Public Sub New()
db = New Eva.Dal.Core.EvaDb
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
特别是我对如何打开数据库感兴趣.在PetaPoco网站上有一个例子
// Create a PetaPoco database
objectvar db=new PetaPoco.Database("connectionStringName");
// Show all articles
foreach …Run Code Online (Sandbox Code Playgroud) 我已经尝试了一段时间了,我真的不明白.我发现错误"不能隐式地将类型'void'转换为'string'"我尝试了多种字符串变体,int,nothing,void,public,static和nope我真的不对.
我想通过我的DAL和BLL从我的db中获取一个值,我的代码看起来像这样.
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Repeater1.DataSource = BLL.getGames();
Repeater1.DataBind();
var culture = CultureInfo.GetCultureInfo("sv-SE");
var dateTimeInfo = DateTimeFormatInfo.GetInstance(culture);
var dateTime = DateTime.Today;
int weekNumber = culture.Calendar.GetWeekOfYear(dateTime, dateTimeInfo.CalendarWeekRule, dateTimeInfo.FirstDayOfWeek);
string mroundY = dateTime.Year.ToString();
string mroundW = weekNumber.ToString();
string mrounddate = mroundY + mroundW;
string mround = BLL.getMroundGames(mrounddate); <-- Here's the error
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我的BLL看起来像这样;
public class BLL
{
public static void getMroundGames(string mrounddate) …Run Code Online (Sandbox Code Playgroud) 我对MVC 4很陌生,到目前为止我在C#中主要使用Web表单.我理解MVC的模式,路由,调用动作等等.
但是负责从数据库中获取数据的操作呢,例如通过激活存储过程?我看过一些教程,他们在操作中直接连接数据库的逻辑.
但是,我正在考虑采用更集中的方式来实现它.例如,我可以将所有触发存储过程的函数放在一个名为DatabaseCoordinator.cs的单独类中,例如,名为Helpers的文件夹中.然后我可以从控制器中的动作调用它们.
通过这种方式,我将知道我可以在一个类中找到我的所有数据库方法,这是一个非常干净的解决方案,我认为(或至少在Web表单中).但是我想遵循MVC的模式,并且只使用模型,视图和控制器作为模式本身的名称.
那么最佳做法是什么?我应该为此单独创建一个类,还是直接在控制器中或者在其他地方实现逻辑?
我需要减去两个日期时间并以HH:MM:SS格式显示它们的网络应用程序.我从mappling类中的数据库中获取这些并尝试在那里减去并转换为字符串格式.我正在尝试以下方式
TimeTook = Convert.ToString(reader.GetDateTimeNullable("COMPLETED_DATE") - reader.GetDateTime("REQUEST_DATE"))
Run Code Online (Sandbox Code Playgroud)
这个语句用在一个映射函数中,当我把它转换成字符串时,我得到了几天HH:MM:SS.ff格式,但我想用HH:MM:SS格式得到它,因为我直接将它绑定到用户控件中的标签如下
<asp:Label ID="lblTimeTook" runat="server" Text='<%# Bind("TimeTook") %>'></asp:Label>
Run Code Online (Sandbox Code Playgroud)
我想直接绑定两个日期之间的差异,并以HH:MM:SS格式显示它们.
在很多 Go 编程书籍中,作者通常将数据访问逻辑放在处理业务逻辑的同一个函数中。虽然我知道这可能仅用于教学目的,但我想知道人们是否真的在现实世界的开发中将 BLL 与 DAL 分开。
我曾尝试将分层设计应用到我的 Go 项目中,但并没有感觉到任何好处。例如,我的 DAL 函数通常是这样的(在 appdal 包中):
func GetCustomerAccountInfo (accountID int) (*sql.Rows, error) {
sql := `SELECT * FROM CUSTOMER_ACCOUNT WHERE ID = $1`
return GLOBAL_PSQL.Query(sql, accountID)
}
Run Code Online (Sandbox Code Playgroud)
我典型的 BLL 函数是这样的:
func NewCustomerAccountBLL (accountID int) (* CustomerAccountBLL) {
rows, err := appdal.GetCustomerAccountInfo(accountID)
// create an instance of CustomerAccountBLL (bll) and scan rows....
return &bll
}
Run Code Online (Sandbox Code Playgroud)
我经常发现我的 BLL 本质上是与数据库模式耦合的,因为扫描要求我知道我的查询读取了哪一列,所以我发现将一些 DAL 函数合并到 BLL 中是一个不错的主意(例如将查询合并到 BLL反而)。此外,拥有 DAL 还会增加我必须维护的代码量。
然而,许多软件架构师也鼓励分层设计,拥有 BLL 和 DAL 并在每一层上分配明确的职责是有意义的。
虽然我也明白设计和模式不一定依赖于编程语言,但我经常发现在我的项目中同时使用 BLL 和 …
我有一个asp.net网站,我想把它组织成三层
这些层中的具体内容是什么?
例如
数据 - 模型 - 存储库?这只是接口 - IoC吗?
域名 - 服务?
UI - javascript - 区域特定型号? - css
有人可以提供一个简单的指南来组织这样的asp.net网站吗?
asp.net domain-driven-design data-access-layer organization n-tier-architecture