根据SQL Server表数据更改标签

时间:2013-12-29 16:04:10

标签: c# sql sql-server forms label

我在表单中有一堆标签文字。

我已设法从另一个表单中获取1个数据到此表单。

但现在我需要根据来自其他表单的数据从表中提取数据..

为了更好地理解,请参见下图

cName值来自另一个表单,当我运行程序时,它将更改为公司名称(这没关系)

图片:Form

这是我对此表单的代码:

public partial class UserFullDetail : Form
{
        public UserFullDetail(string detail)
        {
            InitializeComponent();
            lblcName.Text = detail;
        }

        private void UserFullDetail_Load(object sender, EventArgs e)
        {
            SqlConnection SCScon = new SqlConnection();
            SCScon.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
            SqlDataAdapter daS = new SqlDataAdapter("SELECT cDetails, cDetails2 , mainCate , PhoneNumber, PersonCharge FROM ComDet where cName='" + lblcName.Text + "'", SCScon);
            SCScon.Open();
            DataTable dts3 = new DataTable();
            daS.Fill(dts3);
        }
    }

我想要做的是根据cDetails更改cName和其他内容。

在我的编码中,我设置了数据表和数据集,但我不知道如何提取它以便标签可以使用内部数据。

请帮忙。

2 个答案:

答案 0 :(得分:2)

通过这种方式,您可以获得DataTable的值。

List<string> detail = new List<string>();
foreach( DataRow dr in dts3.Rows)
{
  detail.Add(dr["cDetails"].ToString());
}
lblcDetails = detail[0];

答案 1 :(得分:1)

我建议

  • using () { ... }使用SqlConnection块以确保妥善处理这些对象
  • 使用参数化查询来避免SQL注入攻击

因此请将您的代码更改为:

private void UserFullDetail_Load(object sender, EventArgs e)
{
   string connectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";

   DataTable dts3 = new DataTable();

   using (SqlConnection SCScon = new SqlConnection(connectionString))
   {
      string query = "SELECT cDetails, cDetails2, mainCate, PhoneNumber, PersonCharge FROM dbo.ComDet WHERE cName = @CName";

      SqlDataAdapter daS = new SqlDataAdapter(query, SCScon);
      daS.SelectCommand.Parameters.Add("@CName", SqlDbType.VarChar, 100).Value = lblcName.Text;

      SCScon.Open();
      daS.Fill(dts3);
      SCScon.Close();
   }

   // get the first (and hopefully only) row from your DataTable
   DataRow firstRow = dts3.Rows[0];

   // fill the values to your labels
   lblFirstDetail.Text = firstRow["cDetails"].ToString();
   lblSecondDetail.Text = firstRow["cDetails2"].ToString();
   lblCategory.Text = firstRow["mainCate"].ToString();
   lblPhoneNumber.Text = firstRow["PhoneNumber"].ToString();
   lblPersonInCharge.Text = firstRow["PersonCharge"].ToString();
}

当然,对于您的“真实世界”应用,您必须添加一些检查和错误处理(例如,确保firstRow["mainCate"]中的值未返回NULL - 因为在那里如果在其上调用.ToString()将导致异常),但这是代码应该如何的基本机制。

而且,从架构的角度来看 - 我强烈建议将所有数据库访问代码放入一个处理所有这些工作的单独程序集中 - 不要将所有这些代码放入所有代码隐藏类中!