UpdateDatabase没有异常,但数据库没有更新 - C#,SQL

时间:2016-09-26 12:17:58

标签: c# sql database

感谢其他人对此的疑问,我现在比以前更加困惑。

前言

1)您将要看到的编码来自教程。

2)当从数据库中读取数据时,连接工作正常。我可以成功地比较用户名和密码以“登录”到我的系统,我可以检查谁有管理员凭据,谁是基本用户等。

3)我的数据库中的数据类型是nvarchar(50)和money,所以当需要将数据添加到我的新行时,我根据SQL Server将字符串赋予nvarchar列和decimal列到money列数据类型映射在此处:https://msdn.microsoft.com/en-us/library/cc716729%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

4)我的项目有超过3个表单,登录发生在第一个表单,第一个表单打开第二个使用ShowDialog(),第二个打开第三个使用ShowDialog(),这是我放置的信息新用户并调用更新。它没有抛出异常,我关闭了表单3和2,当我在form1中放入新的用户名和密码时,它们与数据库中的任何条目都不匹配。当我从运行项目返回时,数据库中没有新条目。

*注意:所有表单都成功从数据库中检索数据。

守则(或至少其中重要部分)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MyGym
{
    public partial class Form3 : Form
    {
        DatabaseConnection objConnect;
        string conString;
        DataSet ds;
        DataRow dRow;
        int MaxRows;

        public Form3()
        {
            InitializeComponent();
            try
            {
                objConnect = new DatabaseConnection();
                conString = Properties.Settings.Default.usersConnectionString;
                objConnect.connection_string = conString;
                objConnect.Sql = Properties.Settings.Default.SQL;
                ds = objConnect.GetConnection;
                MaxRows = ds.Tables[0].Rows.Count;
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

        private void userSubmit_Click(object sender, EventArgs e)
        {
                    DataRow newRow = ds.Tables[0].NewRow();
                    if (radCustomer.Checked) // Some radiobutton checks.
                    {
                        newRow[1] = "customer"; //String goes to nvarchar type
                    }
                    else if (radEmployee.Checked)
                    {
                        newRow[1] = "employee";
                    }
                    newRow[2] = userName.Text;
                    newRow[3] = autoPass.Text;
                    newRow[4] = firstName.Text;
                    newRow[5] = lastName.Text;
                    Decimal balance = 0m;
                    newRow[6] = balance; // Decimal goes to money data type
                    ds.Tables[0].Rows.Add(newRow);
                    try
                    {
                        objConnect.UpdateDatabase(ds);
                        MaxRows = MaxRows + 1;
                    }
                    catch (Exception err)
                    {
                        MessageBox.Show(err.Message);
                    }
        }

    }
}

我已经省略了在数据库中搜索相同firstName-lastName组合或相同用户名的代码,它可以正常读取数据库。但写作并不会发生。

我的表定义如下:

CREATE TABLE [dbo].[Users] (
    [Id]        INT           IDENTITY (1, 1) NOT NULL,
    [status]    NVARCHAR (50) NULL,
    [username]  NVARCHAR (50) NULL,
    [password]  NVARCHAR (50) NULL,
    [firstname] NVARCHAR (50) NULL,
    [lastname]  NVARCHAR (50) NULL,
    [balance]   MONEY         NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

非常简单的stuf。

非常感谢任何帮助。

对于好奇的人:这是一个大学课程项目。

提前谢谢大家!

编辑:DatabaseConnection()

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyGym
{
    class DatabaseConnection
    {
        private string sql_string;
        private string strCon;
        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(); }

        }

        private System.Data.DataSet MyDataSet()
        {
            System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);
            con.Open();
            da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);
            System.Data.DataSet dat_set = new System.Data.DataSet();
            da_1.Fill(dat_set, "Table_Data_1");
            con.Close();
            return dat_set;
        }

        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]);
        }
    }
}

0 个答案:

没有答案