关于C#和SQL的问题

时间:2010-12-17 19:03:56

标签: c# sql winforms

我想执行现有记录的更新..我在这里粘贴我的代码的方式我已经成功完成了我的任务但我不想以这种方式实际更新...我想这样做我得到了客户的身份..

private void btnUpdate_Click(object sender, EventArgs e)
        {
            SqlConnection cn = new SqlConnection(@"Data Source=COMPAQ-PC-PC\SQLEXPRESS;Initial Catalog=Gym;Integrated Security=True");
            if (cn.State == ConnectionState.Closed)
            {
                cn.Open();
            }
            int result = new SqlCommand("Update Customer set Customer_Name = '" + tbName.Text + "',Cell_Number = '" + tbContactNumber.Text + "',Customer_Address = '" + tbAddress.Text + "' where CustomerID = " + tbID.Text, cn).ExecuteNonQuery();
            if (cn.State == ConnectionState.Open)
            {
                cn.Close();
            }
            cn.Dispose();

            BindGridView();
        }

private void BindGridView()
        {
            SqlConnection cn = new SqlConnection(@"Data Source=COMPAQ-PC-PC\SQLEXPRESS;Initial Catalog=Gym;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("Select * from Customer", cn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            dgView_CustomerInfo.DataSource = dt.DefaultView;
        }

private void dgView_CustomerInfo_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {

            tbID.Text = dgView_CustomerInfo.Rows[e.RowIndex].Cells["CustomerID"].Value.ToString();
            tbName.Text = dgView_CustomerInfo.Rows[e.RowIndex].Cells["Customer_Name"].Value.ToString();
            tbContactNumber.Text = dgView_CustomerInfo.Rows[e.RowIndex].Cells["Cell_Number"].Value.ToString();
            tbAddress.Text = dgView_CustomerInfo.Rows[e.RowIndex].Cells["Customer_Address"].Value.ToString();
        }

3 个答案:

答案 0 :(得分:5)

上面的编码大猩猩已经给了你一个非常好的答案,我支持它。

在上线20分钟后你会发现自己要问的问题是:“嘿,所有这些黑客是如何得到我的数据的?”

上面的方法是RIPE for SQL Injection。在此处阅读:http://www.securiteam.com/securityreviews/5DP0N1P76E.html

不要将这样的代码投入生产。清理您的输入并使用参数化查询进行数据库交互。

答案 1 :(得分:2)

我认为您要问的是:如何在不放入文本框的情况下存储我的客户ID的状态。

有很多方法可以做到这一点,我会使用ViewState这样做:

public int CustomerId
{
   get { return (int)(ViewState["CustomerId"] ?? -1); }
   set { ViewState["CustomerId"] = value; }
}

您可以在此处详细了解ViewState:http://msdn.microsoft.com/en-us/library/system.web.ui.control.viewstate.aspx

** 编辑 **

如果您使用的是Windows窗体应用程序,ViewState将无法运行,那就是ASP.NET。相反,您应该查看使用BindingSource控件并阅读Winforms中的Databind。

答案 2 :(得分:1)

构建SQL时使用字符串连接!

对占位符使用参数化语句,并使用Parameter对象设置值。