0

我有在单击按钮时执行的代码。它连接到一个 sql 数据库并读取两个值。我想要实现的只是将此代码放在一个名为“DataManager”的单独类中,然后从我的按钮单击调用该类中的一个方法并将两个字符串放入我的文本框中。

string sReference = txtReference.Text;

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ToString());
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_SELECT_CONSHEAD_BY_ENQUIRY_NUMBER";
cmd.Parameters.AddWithValue("@EnquiryNumber", sReference);                        
cmd.Connection = con;
con.Open();
SqlDataReader sdr = cmd.ExecuteReader();

while (sdr.Read())
{
    txtAccount.Text = sdr["Consignee"].ToString();
    txtAccount_Printed.Text = sdr["Consignee_Printed"].ToString();
}

con.Close();
con.Dispose();

我在想我的方法应该是这样的

// Select from ConsHead by Reference Number
    public string SelectConsHead(string sReference, out string sAccount, out string sAccount_Printed)
    {
        sAccount_Printed = "";
        sAccount = "";
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ToString());
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "sp_SELECT_CONSHEAD_BY_ENQUIRY_NUMBER";
        cmd.Parameters.AddWithValue("@EnquiryNumber", sReference);
        // Attach connection to command
        cmd.Connection = con;
        con.Open();
        SqlDataReader sdr = cmd.ExecuteReader();

        while (sdr.Read())
        {
            sAccount = sdr["Consignee"].ToString();
            sAccount_Printed = sdr["Consignee_Printed"].ToString();
        }
        con.Close();
        con.Dispose();


        return sAccount + sAccount_Printed;

    }

但我不确定如何调用该方法并将相应的值检索到文本框中。

4

2 回答 2

3

您应该避免在方法定义中使用 out 参数。它们没有被使用,因为您正在返回 account 和 account_printed 字符串的串联,因此您的方法签名应如下所示:

 public string SelectConsHead(string sReference)

...因此您需要声明本地字符串变量,例如:

var sAccount_Printed = "";
var sAccount = "";

您还应该考虑为什么要在字符串变量名称前加上“s”前缀,因为许多人认为这是不好的做法。有关 Microsoft 的编码指南,请参阅此链接:

http://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx

如果您的类称为 DataManager,则需要实例化该类才能调用您的方法(因为它不是静态的)。例如:

var sReference = // some code here to get sReference.
var dm = new DataManager();
var consHead = dm.SelectConsHead(sReference);

另一个好的做法是支持“使用”语句而不是手动打开和关闭 SqlConnection。看这里:

C# using 语句、SQL 和 SqlConnection

为了在文本框中打印结果,假设您正在构建一个 windows 窗体应用程序,您需要知道文本框的 id,然后您可以像这样填充它(这里文本框的 id 是'myTextBox'):

myTextBox.Text = consHead;
于 2013-06-27T12:55:28.747 回答
1

答案会因您使用的是 ASP.NET Web 应用程序还是 Windows 窗体应用程序而异。

我可以基于 ASP.NET 来回答。

首先,您的 DataManager 类中的 SelectConsHead 方法需要是静态的,或者您需要使用按钮和文本框在页面的代码隐藏中创建 DataManager 类的新实例。如果你走静态路线,你的方法标题将如下所示:

public static string SelectConsHead

然后在带有按钮和文本框的页面的代码隐藏中,您将在按钮的单击事件处理程序中调用 SelectConsHead 方法。

如果你走非静态路线,下面是你如何实例化你的类并在代码隐藏中调用它的方法:

DataManager dm = new DataManager();
dm.SelectConsHead(your parameters here);

此外,您应该采纳 Ronnie 的建议来修改您的方法。

于 2013-06-27T13:00:16.390 回答