将数据保存在Database C#WPF中

时间:2016-04-16 22:13:29

标签: c# sql wpf database

这是我第一次使用数据库,所以也许我遗漏了一些东西,但我的数据库没有更新。

我在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方法时,该表看起来是空的。

提前致谢!!抱歉长篇文章。

0 个答案:

没有答案