我正在尝试在控制台应用程序中使用Wcf服务。 wcf服务在控制台应用程序中正在执行插入,更新和删除操作,但是我无法通过在控制台应用程序中使用wcf服务从数据库中检索数据。 我有具有必需的数据成员的本地类,并且在wcf服务中定义了一个方法,该方法需要一个称为帐号的参数。 在控制台应用程序用户中输入帐号,并且控制台应基于此帐户从sql数据库检索所有数据,但它是我在运行Console Application时提供的唯一检索帐号。 如果有人帮助我,我将不胜感激。

这是本地类的代码。

      [DataContract]
         public class AccountBalanceRequest : Current_Account_Details
            {
    string account_number;

    [DataMember]
    public string Account_Number
    {
        get { return account_number; }
        set { account_number = value; }
    }
}
}

这是ADO.NET代码。

      public bool AccountBalanceCheek(AccountBalanceRequest accountNumber)
    {
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM 
             Current_Account_Details WHERE Account_Number ='" + 
              accountNumber.Account_Number + "'", conn))
            {
                cmd.Parameters.AddWithValue("@Account_Number", 
                accountNumber.Account_Number);
               cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                return true;

            }

        }
    }

这是控制台应用程序代码。

      public static void Balance()
    {
        MyService.HalifaxCurrentAccountServiceClient currentAccount = new MyService.HalifaxCurrentAccountServiceClient("NetTcpBinding_IHalifaxCurrentAccou
            ntService");

        MyService.AccountBalanceRequest cs = new MyService.AccountBalanceRequest();


        string AccountNumber;


        Console.WriteLine("\nEnter your Account Number--------:");
        AccountNumber = Console.ReadLine();
        cs.Account_Number = AccountNumber;
         MyService.AccountBalanceRequest cs1 = 

     currentAccount.AccountBalanceCheek(cs);//Error on this line.

                Console.WriteLine("Your Account Number is :" +cs.Account_Number);
                Console.WriteLine("Your Account Type :" + cs.Account_Balance);
                Console.WriteLine("Your Account Account Fee :" + cs.Account_Fee);
                Console.WriteLine("Your Account Balance:" + cs.Account_Balance);
                Console.WriteLine("Your Account Over Draft Limit :" + cs.Over_Draft_Limit);

                Console.Write("--------------------------");
                Console.ReadLine();

}

这是我运行应用程序时输出的屏幕截图。

点击这里查看输出

#1楼 票数:2 已采纳

您的方法AccountBalanceCheek并未从数据库中检索数据,因为它正在使用ExecuteNonQuery且仅返回bool

您可以做的是:

    //change return type from bool to AccountBalanceRequest    
    public AccountBalanceRequest AccountBalanceCheek(AccountBalanceRequest accountNumber)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();
                //use top 1 since you are only getting one record.
                //let us use string interpolation, if you are working below C#6
                //replace it with your previous value
                var cmd = new SqlCommand($@"SELECT TOP 1
                                                * 
                                            FROM 
                                                Current_Account_Details 
                                            WHERE 
                                                Account_Number ='{accountNumber.Account_Number}'", conn));
                cmd.CommandType = CommandType.Text;
                //use ExecuteReader to execute sql select
                //ExecuteNonQuery is for update, delete, and insert.
                var reader = cmd.ExecuteReader();
                //read the result of the execute command.
                while(reader.Read())
                {
                    //assuming that your property is the same as your table schema. refer to your table schema Current_Account_Details
                   //assuming that your datatype are string... just do the conversion...
                    accountNumber.Account_Balance = reader["Account_Balance"].ToString();
                    accountNumber.Account_Fee = reader["Account_Fee"].ToString();
                    accountNumber.Account_Balance = reader["Account_Balance"].ToString();
                    accountNumber.Over_Draft_Limit = reader["Over_Draft_Limit"].ToString();
                }
                return accountNumber;
            }
        }

在控制台应用程序代码中,必须使用cs1输出值。

//previously returns bool, now it returns AccountBalanceRequest
MyService.AccountBalanceRequest cs1 =currentAccount.AccountBalanceCheek(cs);
//use cs1
Console.WriteLine("Your Account Number is :" +cs1.Account_Number);
Console.WriteLine("Your Account Type :" + cs1.Account_Balance);
Console.WriteLine("Your Account Account Fee :" + cs1.Account_Fee);
Console.WriteLine("Your Account Balance:" + cs1.Account_Balance);
Console.WriteLine("Your Account Over Draft Limit :" + cs1.Over_Draft_Limit);

  ask by Rasel translate from so

未解决问题?本站智能推荐:

1回复

C#-WCF客户端/服务器在服务应用程序上打开控制台

问题更大,但我尝试将其简化为更简单的样式: 让我们假设,我只是在编写客户机/服务器模型。 我设法连接到该服务,并且可以使用其功能并且能够进行通信。 连接是通过服务器站点上的配置文件建立的,客户端只需在其Main函数中通过创建WsHTTPEndpoint的Channelfactory来连
2回复

如何通过控制台应用程序调用POST RESTFUL服务

我有一个休息服务(POST),它接受Json对象作为输入(Fiddler中的Request主体)。 现在,我想使用动态值(从文本文件读取或硬编码的值)来使用Console Applciation中的服务。 我将记录操作,例如对于此测试数据XXXXX,服务将返回值。 任何人都可以帮助我如
1回复

调用WCF的C#控制台应用程序的窗口调度程序失败

我有一个C#控制台应用程序,该应用程序从远程WCF服务获取数据。 该应用程序可以在Visual Studio中正常运行,也可以双击C#Release Bin文件夹中的application.exe文件。 两种情况都运行良好。 但是,当我尝试通过Windows Scheduler计划运行
6回复

添加对控制台应用程序的 Web 服务引用

我在控制台应用程序中创建了一个简单的 Web 服务。 (PersonService) 这是我下面的 Program.cs 我正在尝试向不同的控制台应用程序 (PersonClient) 添加服务引用,我该怎么做? 我尝试通过右键单击添加它,添加服务引用,指向引用等...但它不会工作。
2回复

WCF-控制台托管

我只是想知道..我已经创建了可工作的WCF服务,其中serwer是一个控制台应用程序。 这仅在我在Visual Studio中启动主机时有效,对吗? 我的意思是,当我尝试从* .exe启动时,它似乎可以工作,但随后我的localhost页面显示空白页面,并且客户端崩溃。 我知道我可以使
2回复

从控制台应用程序获取wcf结果

我想从WCF服务(公开数据库视图)中获取值,然后从控制台应用程序将数据插入到我的数据库中。 当我尝试在浏览器中访问WSDL时得到了结果。 我在控制台应用程序中添加了wcf服务参考。 之后,我需要做什么。 任何帮助将不胜感激。 谢谢
1回复

在控制台模式应用程序中显示的LINQ to SQL

我编写了一个控制台模式应用程序来测试LINQ to SQL查询。 当我运行控制台模式应用程序时,正在控制台窗口中显示生成的SQL 。 我没有更改任何设置,为什么要输出? 它非常方便,并且已经帮助我调试了LINQ查询,但是我不知道如何生成此生成的SQL 。 请有人能启发我吗?
2回复

在控制台应用程序中编译SQL报表

我必须编写一个控制台应用程序,该应用程序将在数据库上运行sql查询。 然后,应用程序必须获取此信息并将其编译为报告,然后将此报告导出为pdf,然后通过电子邮件将pdf报告发送出去。 (所有这些必须自动发生-我将使用Windows Scheduler在特定的日期和时间运行此应用程序。)