C# 将值抛出到另一个类中以获取SQL表第一行的值
我正在尝试从SQL表行获取第一个结果。但是我通过使用类来获得结果,从而得到约束。 我想通过输入供应商电子邮件来显示供应商代码,如下所示 班级计划C# 将值抛出到另一个类中以获取SQL表第一行的值,c#,class,C#,Class,我正在尝试从SQL表行获取第一个结果。但是我通过使用类来获得结果,从而得到约束。 我想通过输入供应商电子邮件来显示供应商代码,如下所示 班级计划 protected void Button_register_supplier_Click(object sender, EventArgs e) { string email_supplier = TextBox_email_supplier.Text; c_supplier reg = new c_supp
protected void Button_register_supplier_Click(object sender, EventArgs e)
{
string email_supplier = TextBox_email_supplier.Text;
c_supplier reg = new c_supplier();
reg.tampil_register(email_supplier);
Label_tampil_kode_user.Text = reg.tampil_register().ToString();
}
类供应商
public string tampil_register(string email_supplier)
{
SqlCommand command = new SqlCommand();
command.CommandText = "SELECT kode_supplier FROM tb_supplier WHERE email_supplier = @email_supplier";
command.Parameters.AddWithValue("@email_supplier", email_supplier);
command.CommandType = CommandType.Text;
command.Connection = con;
con.Open();
SqlDataReader dr = command.ExecuteReader();
string hasil;
while (dr.Read())
{
hasil = dr.GetValue(0).ToString();
return hasil;
}
}
因此,我将把我的程序类中的值扔给supplier类,以获得用户代码值。然后,此用户代码将再次显示在我的程序类中,方法是将其显示在我的文本标签中。您的
c\u供应商
类存在设计缺陷-您使用的是类级别SQLConnection
实例。这是一个问题,因为这意味着您没有利用内置的连接池(而且由于它实现了IDisposable
接口,您有内存泄漏的风险)。您应该始终为SQLConnection
使用局部变量,并尽快处理它。另外,当需要使用ExecuteScalar
时,您正在使用ExecuteReader
,并且您也没有处理SQLCommand
实例
更好的代码应该是这样的:
public string tampil_register(string email_supplier)
{
using(var con = new SqlConnection(connectionString))
{
using(var command = new SqlCommand("SELECT kode_supplier FROM tb_supplier WHERE email_supplier = @email_supplier", con))
{
command.Parameters.Add("@email_supplier", SqlDbType.VarChar).Value = email_supplier;
con.Open();
var hasil = command.ExecuteScalar();
if(hasil != null && hasil != DBNull.Value)
{
return hasil.ToString();
}
}
}
return ""; // in case no record was found
}
也就是说,您同时调用了tampil\u register
方法两次,一次使用字符串,一次不使用字符串,因此您的按钮点击代码可能是:
protected void Button_register_supplier_Click(object sender, EventArgs e)
{
c_supplier reg = new c_supplier();
Label_tampil_kode_user.Text = reg.tampil_register(TextBox_email_supplier.Text);
}
这段代码到底有什么不起作用?是的,这段代码不起作用,问题出在类Supplier和
reg.tampil_寄存器()中的return hasil
。ToString()
在类程序@Renew中哪个是问题所在?只需执行以下操作:Label\u tampil\u kode\u user.Text=reg.tampil\u register(电子邮件供应商)
但您最好将hasil
存储在Supplier
的一个实例变量中,并添加一个属性来读取它。我也不清楚问题出在哪里,但如果要在第一次迭代中返回,您不必在时进行循环。只需调用Read()
。此代码按预期工作,非常有用。谢谢你@ZoharPeled