我为您创建了一个简单的应用程序并编辑了整个答案!这将是一个很长的答案。您可以将新人员保存到数据库或从数据库中删除人员,也可以从GridView 中删除。这是带有一些图片示例的代码:
人物类:
public class Person
{
#region Members
private int _ID = -1;
private string _FirstName = string.Empty;
private string _LastName = string.Empty;
private DateTime? _BirthDate = null;
private string _PhoneNumber = string.Empty;
private string _Email = string.Empty;
private bool _Changed = false;
#endregion
public Person()
{
_Changed = false;
}
#region Methods
public void Save()
{
if (!_Changed)
return;
using (SqlConnection con = new SqlConnection(@"server=.\sqlexpress;database=People;integrated Security=True;"))
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "Person_Save";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ID", _ID);
cmd.Parameters.AddWithValue("@FirstName", _FirstName);
cmd.Parameters.AddWithValue("@LastName", _LastName);
cmd.Parameters.AddWithValue("@BirthDate", _BirthDate);
cmd.Parameters.AddWithValue("@PhoneNumber", _PhoneNumber);
cmd.Parameters.AddWithValue("@Email", _Email);
try
{
con.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
_ID = dr.GetInt32(0);
_Changed = false;
}
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message, "Error message");
}
}
}
public void Delete()
{
using (SqlConnection con = new SqlConnection(@"server=.\sqlexpress;database=People;integrated Security=True;"))
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "Person_Delete";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ID", _ID);
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message, "Error message");
}
}
}
#endregion
#region Properties
public int ID
{
get { return _ID; }
set
{
if (_ID != value)
{
_ID = value;
_Changed = true;
}
}
}
public string FirstName
{
get { return _FirstName; }
set
{
if (_FirstName != value)
{
_FirstName = value;
_Changed = true;
}
}
}
public string LastName
{
get { return _LastName; }
set
{
if (_LastName != value)
{
_LastName = value;
_Changed = true;
}
}
}
public DateTime? BirthDate
{
get { return _BirthDate; }
set
{
if (_BirthDate != value)
{
_BirthDate = value;
_Changed = true;
}
}
}
public string PhoneNumber
{
get { return _PhoneNumber; }
set
{
if (_PhoneNumber != value)
{
_PhoneNumber = value;
_Changed = true;
}
}
}
public string Email
{
get { return _Email; }
set
{
if (_Email != value)
{
_Email = value;
_Changed = true;
}
}
}
public bool Changed
{
get { return _Changed; }
set { _Changed = value; }
}
#endregion
}
PeopleForm 类:
public partial class PeopleForm : Form
{
public PeopleForm()
{
InitializeComponent();
FillDataSource();
}
public void FillDataSource()
{
List<Person> list = new List<Person>();
using (SqlConnection con = new SqlConnection(@"server=.\sqlexpress;database=People;integrated Security=True;"))
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "People_Read";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
try
{
con.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
list.Add(new Person()
{
ID = (int)dr["ID"]
,FirstName = dr["FirstName"] as string
,LastName = dr["LastName"] as string
,BirthDate = dr["BirthDate"] as DateTime?
,PhoneNumber = dr["PhoneNumber"] as string
,Email = dr["Email"] as string
});
}
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message, "Error message");
}
}
personBindingSource.DataSource = list;
}
private void btnSave_Click(object sender, EventArgs e)
{
foreach (Person person in personBindingSource)
{
person.Save();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
((Person)grdPeople.CurrentRow.DataBoundItem).Delete();
personBindingSource.RemoveAt(grdPeople.CurrentRow.Index);
}
}
存储过程:
CREATE PROCEDURE [dbo].[Person_Save]
@ID int
,@FirstName nvarchar(30)
,@LastName nvarchar(30)
,@BirthDate date
,@PhoneNumber nvarchar(30)
,@Email nvarchar(50)
AS
BEGIN
IF(@ID = -1)
BEGIN
INSERT INTO People
VALUES (@FirstName,
@LastName,
@BirthDate,
@PhoneNumber,
@Email)
SET @ID = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE People
SET FirstName = @FirstName,
LastName = @LastName,
BirthDate = @BirthDate,
PhoneNumber = @PhoneNumber,
Email = @Email
WHERE ID = @ID
END
SELECT @ID;
END
CREATE PROCEDURE [dbo].[Person_Delete]
@ID int
AS
BEGIN
DELETE
FROM People
WHERE ID = @ID
END
CREATE PROCEDURE [dbo].[People_Read]
AS
BEGIN
SELECT ID
,FirstName
,LastName
,BirthDate
,PhoneNumber
,Email
FROM People
ORDER BY LastName, FirstName
END
您必须将您的 Person 类绑定到您的 DataGridView 作为绑定源,如下所示:
最后你会得到如下所示的工作应用程序:
请注意,我只是稍微改变了颜色,没什么特别的。我添加了一些人作为示例。您将不得不处理出生日期列中错误输入的错误,但探索一些乐趣。我想我给了你足够多的东西来开始你的申请。
玩得开心!