Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值抛出到另一个类中以获取SQL表第一行的值_C#_Class - Fatal编程技术网

C# 将值抛出到另一个类中以获取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

我正在尝试从SQL表行获取第一个结果。但是我通过使用类来获得结果,从而得到约束。 我想通过输入供应商电子邮件来显示供应商代码,如下所示

班级计划

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