【问题标题】:How To Send And Receive Value From Class in C#如何在 C# 中从类中发送和接收值
【发布时间】:2013-07-29 00:59:17
【问题描述】:

我有 2 个类,第一个 Connector

public class Connector
{
    private SqlConnection sqlCon = new SqlConnection();

    public ErrorProvider ConnectTo(string serverID, string databaseName)
    {
        ErrorProvider errorProv = new ErrorProvider();
        const string defineString = "Data Source={0};Initial Catalog={1};Integrated Security=True;Asynchronous Processing=true;MultipleActiveResultSets=True";

        try
        {
            if (sqlCon.State == ConnectionState.Open && sqlCon.ConnectionString == string.Format(defineString, serverID, databaseName))
            {
                errorProv.ConnectionStatus = ConnectionStat.Success;
            }
            sqlCon.ConnectionString = string.Format(defineString, serverID, databaseName);
            sqlCon.Open();
            sqlCon.Close();
            errorProv.ConnectionStatus = ConnectionStat.Success;

        }
        catch (SqlException ex)
        {
            errorProv.ConnectionStatus = ConnectionStat.Fail;
            errorProv.ErrorMessage = ex;
        }
        return errorProv;
    }
}

现在我想向其他类调用发送值 ErrorProvider

public class ErrorProvider
{    
    public ConnectionStat ConnectionStatus { get; set; }
    public SqlException ErrorMessage { get; set; }
    public ConnectionDetils ConnectionDet;
}

public enum ConnectionStat
{
    Success,
    Fail
}

public class ConnectionDetils
{
    public string ServerID { get; set; }
    public string DatabaseName { get; set; }
    public string UserName { get; set; }
}

当我尝试在这段代码中使用它时,它什么也没返回

OT.ConnectTo("(local)", "TestOTLab").ErrorMessage.ToString
OT.ConnectTo("(local)", "TestOTLab").ConnectionStatus.ToString

我希望它通过错误值、连接状态、DatabaseName、ServerID 和 Username 返回。 我怎么能这样做

【问题讨论】:

  • ToString() 不应该有括号吗?
  • 如果连接成功,那么ErrorMessage将为空,所以你调用.ToString会抛出异常。
  • 我将您的变量更新为小写,以便 stackoverflow 将它们着色为黑色并且更易于阅读。我还删除了命名空间详细信息,因为这没有为问题增加任何价值。

标签: c# class oop


【解决方案1】:

public ConnectionDetils ConnectionDet; 行定义了ErrorProvider 类中的一个字段。您可以设置和读取该字段以及ErrorMessage 字段。

ErrorProv.ConnectionStatus = Error.ErrorProvider.ConnectionStat.Success;
ErrorProv.ErrorMessage = "";   // Don't forget this field in 'success' scenario
var details = new Error.ConnectionDetils();
details.ServerID = ServerID;
details. ...the rest of data ...
ErrorProv.ConnectionDet = details;

然后阅读它

var status = OT.ConnectTo("(local)", "TestOTLab");
Console.WriteLine(status.details.ServerID); ...

【讨论】:

    【解决方案2】:

    我没有在 Visual Studio 中尝试过代码但不只是添加以下内容吗?

    var errorProvider = OT.ConnectTo("(local)", "TestOTLab");
    if (errorProvider != null)
    {
       var errorMessage = errorProvider.ErrorMessage;
       var connectionStatus = errorProvider.ConnectionStat;
       var connectionDetails = errorProvider.ConnectionDetails;
    
       if (connectionDetails != null)
       {
           var serverID = connectionDetails.ServerID;
           \\insert other variables here...
       }
    }
    

    因为 ErrorMessage 是 SqlException 类型,所以您需要选择要显示的属性,例如消息属性。

    【讨论】:

      【解决方案3】:

      我发现您的代码存在以下问题:

      OT.ConnectTo("(local)", "TestOTLab").ErrorMessage.ToString
      OT.ConnectTo("(local)", "TestOTLab").ConnectionStatus.ToString
      
      1. 您在对 ToString 的调用中缺少 ()
      2. 由于您正在调用数据库,因此您正在建立两个连接 ConnectTo 方法两次
      3. 如果连接成功,您正在尝试访问 ToString() 空对象上的方法。

      试试这个:

          var connector = OT.ConnectTo("(local)", "TestOTLab");
          Console.WriteLine(connector.ConnectionStatus.ToString());
          if (connector.ConnectionStatus == ConnectionStat.Fail)
          {
              Console.WriteLine(connector.ErrorMessage.ToString());
          }
      

      【讨论】:

        猜你喜欢
        • 2010-12-22
        • 2012-06-24
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        相关资源
        最近更新 更多