我决定编写一个连接到SQL服务器的联系程序。 差不多我已经完成了代码和程序运行良好。 但我有一个问题。 当用户想从这个程序中删除一个联系人时,他应该输入他想删除的联系人的姓氏,然后按下表格中的删除按钮。 这种方式并不是很好,因为有可能有5个家庭成员具有相同的姓氏。 我决定在代码名称中添加SQL服务器中的一个字段。 此代码对于每个联系人都是唯一的。 但我有一个问题。我应该如何编写程序,只要用户输入联系人信息并单击保存,这个唯一代码就会自动添加到SQL服务器中的代码字段中? 这里是我的代码,你可以看到:设置代码到SQL服务器并显示在DataGridView中
namespace Contact
{
class Operation
{
SqlConnection cn;
public Operation()
{
cn = new SqlConnection(Connection.Server);
}
public DataTable Show()
{
SqlCommand cmd = new SqlCommand("select * from tblContact ", cn);
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, cn);
DataTable dt = new DataTable();
da.Fill(dt);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
return dt;
}
public void Add(string Name , string FamilyName , string Work , string Fax , string Phone , string Home)
{
SqlCommand cmd = new SqlCommand("insert into tblContact(Name,FamilyName,Work,Fax,Phone,Home) values ('" + Name + "' , '" + FamilyName + "' , '" + Work + "' , '" + Fax + "' , '" + Phone + "' , '" + Home + "')", cn);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
public void Delete(string FamilyName)
{
SqlCommand cmd = new SqlCommand("delete from tblContact where FamilyName = '" + FamilyName + "'", cn);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
public void Update (string Name , string FamilyName , string Work , string Fax , string Phone , string Home)
{
SqlCommand cmd = new SqlCommand("update tblContact set FamilyName = '" + FamilyName + "' ,Work = '" + Work + "' , Fax = '" + Fax + "' , Name = '" + Name + "' , Home = '" + Home + "' where Phone = '" + Phone + "'",cn);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
}
搜索有关[IDENTITY列(https://msdn.microsoft.com/en-us/library/ms186775.aspx? F = 255&MSPPError = -2147217396)。之后,看看如何编写参数化查询。如果您允许用户从DataGridView中进行选择,然后将您需要的所有列隐藏在DataGridView的Identity密钥字段中,并且当用户选择了一行时,则您的代码是每个黑客的免费通行 – Steve
一个'foreach(dataGridView.SelectedRows中的DataGridViewRow行)''那么你可以捕获KeyId的例子,并从表中删除KeyId =从'row.Cells [0] .Value'中选择的KeyId的表格 – MethodMan
你需要阅读,理解并立即开始使用参数化查询。这是广泛开放的SQL注入。你真的应该避免使用select *,除非它在EXISTS中 –