我在c#中做了3层架构的基本示例。我为数据和业务层创建了两个dll。我也在业务层代码中使用数据层dll。并且,表示层中的业务dll和数据访问dll(这是一个winform应用程序。)现在,当执行表示层代码时,会出现一个例外:
数据库 'd:\ 11feb \实践\ 3TIER \表示层\表示层\ BIN \调试\ Data.mdf' 不存在。
我在数据层中创建了数据库Data.mdf
。
我将数据库文件复制到异常中提到的位置,并且应用程序已成功执行。但我希望从我的数据层访问数据库。
数据层代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DataAccessLayer
{
public class DataAccess
{
public DataTable dataRead()
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Data.mdf;Database=Data;Integrated Security=True;User Instance=True");
DataTable dt = new DataTable();
con.Open();
SqlCommand cmd = new SqlCommand("select ID,Name from datatable", con);
try
{
SqlDataReader rd = cmd.ExecuteReader();
dt.Load(rd);
return dt;
}
catch
{
throw;
}
}
}
}
业务层代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccessLayer;
using System.Data;
namespace BusinessLogicLayer
{
public class BusinessLogic
{
DataAccess dataAccess = new DataAccess();
public DataTable getPersons()
{
try
{
return dataAccess.dataRead();
}
catch { throw; }
}
}
}
表示层代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BusinessLogicLayer;
namespace PresentationLayer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
BusinessLogic BusinessLogic = new BusinessLogic();
this.dataGridView1.DataSource = BusinessLogic.getPersons();
}
catch
{
MessageBox.Show("Error Occurred");
}
}
}
}
答案 0 :(得分:1)
问题是您在解决方案中添加了Data.mdf,但是当应用程序运行时,它会尝试在bin目录中找到mdf文件。单击解决方案中的Data.mdf文件。转到其属性(按F4键),然后查找“复制到输出目录”属性,然后将值更改为“始终复制”。
还要检查你的连接字符串。