这是我第一次使用数据库,所以也许我遗漏了一些东西,但我的数据库没有更新。
我在Visual Studio中创建了一个名为MainAreas的数据库,其中包含两列:MainAreaId(主键)和MainAreaName(字符串)。
在我的应用程序中,用户添加,删除和更新主要区域,我想将此信息保存在数据库中,因此当程序关闭并再次打开时,之前添加的主要区域仍然存在。
我所做的设计如下(这部分可能不是更合适的解决方案,我接受建议):我创建了一个名为DatabaseConnection的类,它连接到数据库,还有一个名为RoomsDatabaseHandler的类,用于更新数据库在AreasUserControl中添加了MainAreas(参见附图):Class diagram
目前我已经实现了一个在数据库的MainAreas表中添加新行的函数,以及一个在启动应用程序时检索MainAreas表中所有MainAreas的函数。但这不起作用。
这是我的DatabaseConnection类:
class DatabaseConnection
{
private string sql_string;
private string strCon;
private System.Data.SqlClient.SqlDataAdapter da_1;
public string Sql
{
set { sql_string = value; }
}
public string connection_string
{
set { strCon = value; }
}
public System.Data.DataSet GetConnection
{
get
{ return MyDataSet();}
}
public void UpdateDatabase(System.Data.DataSet ds)
{
System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1);
cb.DataAdapter.Update(ds.Tables[0]);
}
private System.Data.DataSet MyDataSet()
{
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);
da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);
System.Data.DataSet dat_set = new System.Data.DataSet();
da_1.Fill(dat_set, "MainAreas");
//da_1.Fill(dat_set);
con.Close();
return dat_set;
}
}
这是我的RoomsDatabaseHandler类:
public class RoomsDatabaseHandler
{
DatabaseConnection objConnect;
string conString;
DataSet ds;
DataRow dRow;
public RoomsDatabaseHandler()
{
objConnect = new DatabaseConnection();
conString = Properties.Settings.Default.MyDatabaseConnectionString;
objConnect.connection_string = conString;
objConnect.Sql = Properties.Settings.Default.SQL;
ds = objConnect.GetConnection;
}
public void AddNewMainArea(string mainAreaName)
{
DataRow row = ds.Tables[0].NewRow();
row[0] = ds.Tables[0].Rows.Count;
row[1] = mainAreaName;
ds.Tables[0].Rows.Add(row);
try
{
objConnect.UpdateDatabase(ds);
MessageBox.Show("Database updated", "OK",
MessageBoxButton.OK, MessageBoxImage.Information);
}
catch(Exception err)
{
MessageBox.Show(err.Message);
}
}
public List<string> LoadMainAreas()
{
List<string> mainAreasList = new List<string>();
for (int it = 0; it < ds.Tables[0].Rows.Count; it++ )
{
dRow = ds.Tables[0].Rows[it];
mainAreasList.Add(dRow.ItemArray.GetValue(1).ToString());
}
return mainAreasList;
}
}
请你帮忙告诉我这里有什么问题?当用户添加新的主区域时,会显示消息框“数据库更新”,但如果我查看服务器资源管理器中的MainAreas表数据,则无法看到添加的任何行。当我重新启动应用程序并调用LoadMainAreas方法时,该表看起来是空的。
提前致谢!!抱歉长篇文章。