我正在开发一个MVC3项目,我们正在开发一个供多家公司使用的站点。每家公司都有自己的数据库目录。站点登录信息全部存储在单个“主”数据库中,该数据库包含用于每个用户的目录名称。但是,这些目录与其他结构略有不同。我要做的是设置标准模型,但根据用户的目录将数据绑定到这些模型。
public class UserSearchEntityLayer
{
public class SearchOptionsList
{
public virtual string SearchOptionText { get; set; }
public virtual string SearchOptionValue { get; set; }
}
}
public class UserSearchDBLayer : UserSearchEntityLayer
{
DbSet<SearchOptionsList> SearchOptions { get; set; }
public UserSearchDBLayer(string ClientCode)
{
//Connection Strings
var ClientConn = "Data Source=HelloWorld;Initial Catalog=" + ClientCode + ";Integrated Security=True;Persist Security Info=True";
//Prep Work
DataSet SearchOptionsDS = new DataSet();
SqlConnection cn = null;
SqlDataAdapter cmd = null;
SqlDataReader dr = null;
string SQLSelect = string.Empty;
//Start Work
try
{
cn = new SqlConnection(ClientConn);
cn.Open();
switch (ClientCode)
{
case "AAG":
//SearchOptions
SQLSelect = "SELECT [Report_Level] as 'Value',[Report_Level_Name] as 'Text' FROM [MASTER_REPORTING_LEVELS] Order By 'Value' DESC";
cmd = new SqlDataAdapter(SQLSelect, cn);
cmd.Fill(SearchOptionsDS);
if (SearchOptionsDS.Tables.Count != 0)
{
if (SearchOptionsDS.Tables[0].Rows.Count > 0)
{
foreach (DataRow R in SearchOptionsDS.Tables[0].Rows)
{
SearchOptions.Add(new SearchOptionsList { SearchOptionText = R["Text"].ToString(), SearchOptionValue = R["Value"].ToString() });
}
}
}
SQLSelect = string.Empty;
SearchOptionsDS.Dispose();
cmd.Dispose();
break;
default:
//Do more stuff here
break;
}
}
catch
{
}
finally
{
SearchOptions.Add(new SearchOptionsList { SearchOptionText = "States", SearchOptionValue = "States" });
SearchOptions.Add(new SearchOptionsList { SearchOptionText = "Locations", SearchOptionValue = "Locations" });
SearchOptions.Add(new SearchOptionsList { SearchOptionText = "Levels", SearchOptionValue = "Levels" });
SearchOptions.Add(new SearchOptionsList { SearchOptionText = "Name", SearchOptionValue = "Name" });
if ((dr != null))
{
if (!dr.IsClosed)
dr.Close();
dr = null;
}
if (cn != null)
{
if (cn.State != System.Data.ConnectionState.Closed)
cn.Close();
cn.Dispose();
cn = null;
}
if (cmd != null)
{
cmd.Dispose();
cmd = null;
}
if (SQLSelect != null)
SQLSelect = null;
}
}
}
这样做的最佳方法是什么?哦,现在这就是给我一个对象错误,因为SearchOptions是null,因为我也没有添加任何东西..
答案 0 :(得分:1)
终于让它运转了....这是我的解决方案(可能不是很漂亮,但它有效)。
public class UserSearchDBLayer : UserSearchEntityLayer
{
public IEnumerable<SearchOptionsList> SearchOptions { get; set; }
public UserSearchDBLayer(string ClientCode)
{
//Connection Strings
var ClientConn = "Data Source=HelloWorld;Initial Catalog=" + ClientCode + ";Integrated Security=True;Persist Security Info=True";
//Prep Work
DataSet SearchOptionsDS = new DataSet();
SqlConnection cn = null;
SqlDataAdapter cmd = null;
SqlDataReader dr = null;
string SQLSelect = string.Empty;
//Start Work
var DataBuilderList = new List<SearchOptionsList>();
try
{
cn = new SqlConnection(ClientConn);
cn.Open();
switch (ClientCode)
{
case "AAG":
//SearchOptions
SQLSelect = "SELECT [Report_Level] as 'Value',[Report_Level_Name] as 'Text' FROM [MASTER_REPORTING_LEVELS] Order By 'Value' DESC";
cmd = new SqlDataAdapter(SQLSelect, cn);
cmd.Fill(SearchOptionsDS);
DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Region", SearchOptionValue = "0" });
if (SearchOptionsDS.Tables.Count != 0)
{
if (SearchOptionsDS.Tables[0].Rows.Count > 0)
{
foreach (DataRow R in SearchOptionsDS.Tables[0].Rows)
{
DataBuilderList.Add(new SearchOptionsList { SearchOptionText = R["Text"].ToString(), SearchOptionValue = R["Value"].ToString() });
}
}
}
DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "States", SearchOptionValue = "States" });
DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Locations", SearchOptionValue = "Locations" });
DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Levels", SearchOptionValue = "Levels" });
DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Name", SearchOptionValue = "Name" });
SQLSelect = string.Empty;
SearchOptionsDS.Dispose();
cmd.Dispose();
break;
default:
//Cool Stuff
break;
}
}
catch
{
}
finally
{
SearchOptions = DataBuilderList;
if ((dr != null))
{
if (!dr.IsClosed)
dr.Close();
dr = null;
}
if (cn != null)
{
if (cn.State != System.Data.ConnectionState.Closed)
cn.Close();
cn.Dispose();
cn = null;
}
if (cmd != null)
{
cmd.Dispose();
cmd = null;
}
if (SQLSelect != null)
SQLSelect = null;
}
}
}
然后你的控制器:
public class TestController : Controller
{
public UserSearchDBLayer model = new UserSearchDBLayer("AAG");
//
// GET: /Test/
public ActionResult Index()
{
return View(model);
}
}
最后查看:
@model PlayGround.Models.UserSearchDBLayer
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
@Html.ListBox("Test", new SelectList(Model.SearchOptions, "SearchOptionValue", "SearchOptionText"), new { size = "25" })
</body>
</html>
如果你有更好的解决方案,我会全神贯注......或者在这种情况下是眼睛。