C# sqlsever数据库 通过datatable更新数据问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# sqlsever数据库 通过datatable更新数据问题相关的知识,希望对你有一定的参考价值。

我想实现的功能是这样的:我从服务器获得几个datatable(字段相同) 存到数据库中的一个表中 然后我再次获取服务器数据 因为服务器数据库可能有变动 那我如何去根据变动去操作数据表 例如 datatable中有新的数据我应该去insert 数据字段有更改 我应该去update 但是我如何去判断数据的变化呢 有主键

为什么你不直接从服务器获取新的DataTable然后替换原来的呢追问

update() 方法吗?以前数据 可能服务器不会存多久 但是本地服务器要一直存 还有就是我用过这个方法 总是insert 而不能update呢

追答

你第一次是怎么获取的就怎么获取啊,你如果想保持本地数据库和服务器的一致,那就要不断的从服务器获取新的数据过来,我不明白你为什么非得要这么绕远

参考技术A 你说服务器存数据不会存多久 那你怎么去判断哪些数据是上次获取的时候存在的 哪些数据是新生成的追问

我2秒取一次数据 本地更新

数据库课程设计 基于C#和Sqlsever开发的教材管理系统论文+源程序+数据库

一、基于C#和Sqlsever开发的教材管理系统

包含完整的论文(字数8000+)+源程序+数据库,可作为数据库、软件开发等相关课程的课程设计或者大作业。

二、目录

课程设计进度及小组成员分工... 1

小组组成及任务划分... 1

小组进度及成员分工... 1

1 背景及意义... 2

1.1 目的与要求... 2

1.2 开发环境... 3

2 需求分析... 3

2.1 信息要求... 3

2.2 处理要求... 3

2.3 安全性和完整性要求... 4

2.4 数据流图... 5

2.5 数据字典... 7

3 概念结构设计... 8

3.1 概念结构设计的方法和步骤... 8

3.2 E-R图... 8

4 逻辑结构设计... 11

4.1 E-R图向关系模型的转换... 11

4.2 数据模型的优化... 13

4.3 设计用户视图... 14

5 物理结构设计... 15

5.1 运行环境... 15

5.2 创建索引... 16

6 数据库实施和维护... 16

6.1 数据的实施... 16

6.2 数据库的备份和恢复方案... 22

7 数据库的操作界面... 24

7.1 数据库的用户操作界面... 24

8 课程设计的过程、存在的问题、体会及建议... 33

9 参考文献... 34

—————————————————————————————————

此处省略几千字

—————————————————————————————————

三、背景及意义

1.设计目的

小组经过对现有的教材管理方面进行调查后,为方便各个学校进行教材的查询、选择、征订,认为可以精心设计出一个用户界面应简洁直观、对用户友好、容易操作、逻辑简单的教材管理系统,因此可以帮助管理人员及学校教务处及教师完成教材征订等繁重复杂的工作,进一步降低指定适用人群的工作量、提高工作的效率、减少出错情况。

在本小组制作的教务管理系统中,管理员可以更新(增删改)、查询检索、统计订教材和使用教材情况,订阅者可以对教材的基本信息及余量、本专业及其他专业的订单情况以及各教材的反馈情况进行查询。

2 .设计要求

作为学校的教材管理系统,应包括以下几个主要功能:

  • 增删改功能:对于管理员,可以对教材表、订单表、反馈表进行增删改操作。

  • 订货功能:根据各系预订计划和某种书籍的库存量确定订货数量。

  • 更新功能:根据订单中教材的到货情况,确认收货后将自动修改教材的库存数量。

  • 查询统计功能:根据用户需求对教材信息及余量、订单情况、使用反馈等进行查询。

同时,系统应当具有较高较好的质量:

  • 系统具有后台管理维护功能,可供管理员进行增删改查操作;

  • 系统的界面应简洁直观、对用户友好、容易操作;

  • 系统具有较高的信息准确度,尽量将数据冗余度降至最低;

  • 系统应当具有一定的稳定性和安全性;

  • 系统的响应速度和访问速度要快,同时要提高信息处理速度和利用率。

3.开发环境

  • 操作系统使用Microsoft Windows 10

  • 数据库软件使用Microsoft SQL Server 2012

  • 用户界面编写使用Microsoft Visual Studio 2019

  • 文档编写使用Microsoft Office Word 2019

四、需求分析

教材理系统包括教材管理人员和用户,教才管理人员功能:教材录入、教材查下、教材修改、库存信息、订货信息、出库信息等等。用户的功能主要有:教材查询、教材信息、库存信息、教材购买、订货信息等

1、 信息要求

管理员用户和普通用户分别拥有一个用户名和密码,其中用户ID、用户名称、用户密码、用户类型,用户类型(分为1和0两种状态,1代表管理员用户,0代表普通用户)会填写到用户信息中进行储存。

当有教材需入库时,管理员用户需手动录入教材的基本信息(书号、教材名、作者、出版社、简介、单价、库存余量),如果在教材入库和出库途中导致书本毁坏,需要手动记录相应的记录信息(书号、操作员、毁坏原因日期)。

普通用户有订购教材的需求,可以给用户提供目前书库中各类教材的情况(如有哪些书及其价格、库存等)以及其他使用者对教材的反馈情况,在用户决定并挑选好自己所需要订购的教材后,需要填写并生成订单信息(订单号、书号、订货数量、订书专业),订单完成后,会自动记录相应的信息(订单号、书号、教材名、订货数量、订书专业、到货情况)到管理员用户中,其中订单号是在普通用户提供增加订单后自动生成。

2、处理要求

管理员用户和普通用户要使用记录在用户信息中对应存在的用户名称和密码才能登录成功。

若有教材入库,管理员用户则需将新的教材信息录入到教材信息中,并维护管理已有的教材,对其进行修改或删除;管理员可对所有订单进行维护管理,可为普通用户修改、撤销其发起的订单申请,在发货且到货后更改订单状态;管理员用户同样可对教材信息、反馈信息、订单信息进行查询。另外,如果在教材入库和出库途中导致书本毁坏,管理员用户需填写相应的记录信息,对情况加以说明,且相应的库存余量也会发生相应的改变,防止最终统计的数据不吻合。

普通用户可以对自己需要订阅的教材的基本信息、使用效果进行查询,在充分了解教材情况后,普通用户可对已有教材发起或撤销订单申请,若需更改,在订单未完成和满足库存余量的情况下,自行进行更改,且教材信息中的各教材库存余量也会进行相应的改变。普通用户还可以在订阅教材且使用过后,在反馈表中增加自己的使用效果评价。

除此之外,普通用户在对提交的订单进行修改时,若教材的库存余量不满足普通用户订阅的数量,普通用户无法完成此次订阅,系统会自动弹跳出信息告诉普通用户他所订阅的教材库存余量不足。

登录教材管理系统时需要访问到已存储的用户信息,以判断该用户是否存在,若存在则需确认存在的用户类型,登录后打开相应的用户界面。

3、 安全性和完整性要求

1 安全性需求

  • 本系统会根据登录及使用对象的不同,授予用户不同的权限,即管理员及普通用户。

  • 管理员拥有最高的权限,可以对教材关系表、订单关系表、反馈关系表进行增加、删除、修改、查询等操作。

  • 普通用户,即订阅者,可以对教材的基本信息及余量、本专业及其他专业的订单情况以及各教材的反馈情况进行查询,但不可以对其中的信息进行添加、删除、修改等操作,只可以发起或撤销订单申请。

  • 使用管理员账号或普通用户账号登录后,会分别显示不同的用户界面,如管理员拥有管理数据记录、增删改查的权限,而普通用户只能查询或提交反馈或订单等。

2 完整性需求

  • 教材信息,有书号、教材名、作者、出版社、简介、单价、库存余量,共8个属性,输入信息的时候填入的值都必须满足类型和长度的要求。其中,书号、教材名、作者不能为空,单价、库存余量的默认值都为0。

  • 订单信息,有订单号、书号、订货数量、订书专业、到货情况,共5个属性,对类型和长度都有一定的要求。其中,订单号、书号、订货数量、专业名不能为空,到货情况的默认值为0,即未到货。

  • 反馈信息,有书号、用书专业、使用效果,共3个属性,同样对类型和长度输入有一定要求。其中,全部属性都不能为空且无默认值。

  • 用户信息,有用户ID、用户名称、用户密码、用户类型,共4个属性,对输入的格式及内容有要求。其中,全部属性都不能为空,用户类型默认值为0。

4、数据流图

顶层图

0层图

六、概念设计

1、全局ER图

2、局部E-R图(部分)

教材模块

教材的属性有:书号、教材名、作者、出版社、简介、单价、库存余量。

订单模块

订单的属性有:订单号、书号、订货数量、订书专业、到货情况。

用户模块

用户的属性有:用户ID、用户名称、用户密码、用户类型。

五、逻辑结构设计

实体所对应的关系模式:

  • 教材(书号,教材名,作者,出版社,简介,单价,库存余量)

主键:书号

  • 订单(订单号,书号,订货数量,订书专业,到货情况)

主键:订单号

外键:书名(对应教材中书号)

  • 反馈(书名,用书专业,使用效果)

主键:书名

外键:书名(对应教材中书号)

  • 用户(用户ID,用户账号,用户密码,用户类型)

主键:用户ID

六、数据库设计(部分)

1、教材表

2、订单表

3、用户表

4、存储过程

5、触发器

七、代码实现(部分)

1、连接数据库代码

// 创建连接对象
SqlConnection sqlCon = new SqlConnection("server=RAZERBLADE15; database=TextbooksMS_DB; Trusted_Connection=SSPI");

2、用户登录代码

// 打开数据库
sqlCon.Open();

// 参数化对象
SqlParameter[] para =
{
    new SqlParameter("@UserName", this.texUserName.Text.Trim()),
    new SqlParameter("@UserPassword", this.texUserPassword.Text.Trim())
};
string strCom = "EXEC findUserInfo @UserName, @UserPassword";
// 创建命令对象
SqlCommand sqlCom = new SqlCommand(strCom, sqlCon);
// 把实参放入形参中
sqlCom.Parameters.AddRange(para);
// 创建游标
SqlDataReader reader = sqlCom.ExecuteReader(System.Data.CommandBehavior.CloseConnection); // 执行返回游标对象
UserInfo userInfo = null; // 创建一个用户对象 
if (reader.Read()) // 如果有读到数据
{
    userInfo = new UserInfo();
    userInfo.UserID = (int)reader["UserID"];
    userInfo.UserName = reader["UserName"].ToString();
    userInfo.UserPassword = reader["UserPassword"].ToString();
    userInfo.UserType = (int)reader["UserType"];
}
reader.Close(); // 关闭游标
sqlCon.Close(); // 关闭连接对象
if (userInfo != null) // 有找到1条记录 即有该用户
{
    MessageBox.Show("登录成功");
    Config.loginUser = userInfo;
    switch(userInfo.UserType)
        {
           case 0:
                MainForm_User mfu = new MainForm_User();
                mfu.Show();
                break;
            case 1:
                 MainForm_Admin mfa = new MainForm_Admin();
                 mfa.Show();
                 break;
         }
     this.Hide();
}
else MessageBox.Show("登录失败"); // 用户不存在

3、新增教材代码

namespace TextbookManagementSystem.TextbookForm
{
    public partial class AddTextbookForm : Form
    {
        public AddTextbookForm()
        {
            InitializeComponent();
            nudPrice.Maximum = decimal.MaxValue;
            nudStock.Maximum = decimal.MaxValue;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            int result = 0;
            try
            {
                string ISBN = this.texISBN.Text.Trim();
                string Name = this.texName.Text.Trim();
                string Author = this.texAuthor.Text.Trim();
                string Publisher = this.texPublisher.Text.Trim();
                string Description = this.rtbDescription.Text.Trim();
                float Price = (float)this.nudPrice.Value;
                int Stock = (int)this.nudStock.Value;

                string strCom = "EXEC addTextbook @ISBN,@Name,@Author,@Publisher,@Description,@Price,@Stock";

                SqlParameter[] para =
                {
                    new SqlParameter("@ISBN",ISBN),
                    new SqlParameter("@Name",Name),
                    new SqlParameter("@Author",Author),
                    new SqlParameter("@Publisher",Publisher),
                    new SqlParameter("@Description",Description),
                    new SqlParameter("@Price",Price),
                    new SqlParameter("@Stock",Stock)
                };
                result = DBHelper.ExecuteNonQuery(strCom, para);
            }
            catch (Exception ex)
            {
                MessageBox.Show("新增教材失败\\n\\n错误如下:\\n" + ex.Message, "提示");
            }
            finally
            {
                if (result > 0)
                {
                    MessageBox.Show("新增教材成功", "提示");
                    this.Close();
                }
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

—————————————————————————————————

此处省略几千字

—————————————————————————————————

八、资源下载

对应完整的论文+源程序+数据库下载:

数据库课程设计 基于C#和Sqlsever开发的教材管理系统 大作业【论文+源程序+数据库+使用说明】https://download.csdn.net/download/frank2102/33756239

以上是关于C# sqlsever数据库 通过datatable更新数据问题的主要内容,如果未能解决你的问题,请参考以下文章

C# ado.net基础 更新一行数据 在sqlsever中的一个表中

C# ado.net基础 删除一行数据 在sqlsever中的一个表中

C# ado.net基础 查询一个表中有多少行数据 在sqlsever中的一个表中

c# datarow[] 转换成 datatable

sqlsever2019不兼容老版本数据备份

数据库课程设计——学生信息管理系统C#,SQL Sever