感谢其他人对此的疑问,我现在比以前更加困惑。
前言
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]);
}
}
}