繁体   English   中英

用C#构建的Web Service从mySQL数据库中检索数据

[英]Web Service built in C# to retrieve data from mySQL database

我正在尝试在.NET中构建一个Web服务,它将从mySQL数据库中检索数据。 此Web服务稍后将与将显示此数据的Windows窗体组合。

到现在为止,我已准备好数据库,数据库和Web服务之间已建立连接,表单也已准备就绪。

但是,我无法从表本身检索特定的信息。 任何人都可以帮我弄清楚我的下一步应该是什么? 我在这个问题上搜索了很多,但我仍然无法找到关于这个问题的好教程...如果你有任何想法,那么你也可以发布链接吗? 提前致谢!

附加信息:假设一个名为“testdata”的样本表,其中有三列(“id”,“name”,“age”)。 如何提取名称和年龄并在表单上显示?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace WebService2
{

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {



        private void connectoToMySql()
        {

            string connString = "SERVER=localhost" + ";" +
                "DATABASE=testdatabase;" +
                "UID=root;" +
                "PASSWORD=password;";

            MySqlConnection cnMySQL = new MySqlConnection(connString);

            MySqlCommand cmdMySQL = cnMySQL.CreateCommand();

            MySqlDataReader reader;

            cmdMySQL.CommandText = "select * from testdata";

            cnMySQL.Open();

            reader = cmdMySQL.ExecuteReader();


           //-----------------------------------------------------------
           // This is the part where I should be able to retrieve the data from the database
           //-----------------------------------------------------------               


            cnMySQL.Close();
        }


    }
}

创建一个公共的方法,用WebMethodAttribute标记,并返回一个DataTable(如果您的使用者是.net客户端)。 让消费者调用该方法并使用DataTable执行任何操作。

[System.Web.Services.WebMethod]
public DataTable connectoToMySql()
{
    string connString = "SERVER=localhost" + ";" +
        "DATABASE=testdatabase;" +
        "UID=root;" +
        "PASSWORD=password;";

    MySqlConnection cnMySQL = new MySqlConnection(connString);

    MySqlCommand cmdMySQL = cnMySQL.CreateCommand();

    MySqlDataReader reader;

    cmdMySQL.CommandText = "select * from testdata";

    cnMySQL.Open();

    reader = cmdMySQL.ExecuteReader();

    DataTable dt = new DataTable();
    dt.Load(reader);


    cnMySQL.Close();

    return dt;
} 

你有几个选择。

首先,您可以摆脱DataReader,而是使用DataAdapter填充DataSet并返回完整的DataSet。 (这可能是最简单的,但如果您打算从非.NET应用程序调用它,那么它是最不友好的。)

其次,您实际上可以使用阅读器,循环遍历数据以填充您的函数应该返回的任何业务对象...但是您还没有给我们足够的信息来告诉您如何执行此操作。

无论哪种方式,你的函数现在都没有返回任何内容,你甚至没有在WebMethod上标记过...我强烈建议回到MSDN获取示例。 或观看此视频: http//www.asp.net/web-forms/videos/how-do-i/how-do-i-create-and-call-a-simple-web-service-in-aspnet

现在,你的代码和问题表明你还没有理解基础知识(没有任何问题 - 我们都从某个地方开始),这个视频将覆盖它们。 目前,您需要的帮助超出我们在此论坛中提供的帮助,而不是向您展示在哪里可以找到您需要的信息。 (我希望我已经完成了。)

当您调用Web服务时,您需要调用将返回数据的方法。

你需要的部分如:

[WebMethod()]
public UserRecord[] GetUserRecords() 
{ 

  List<UserRecod> userRecords = new List<UserRecord>();

    string connString = "SERVER=localhost" + ";" + 
        "DATABASE=testdatabase;" + 
        "UID=root;" + 
        "PASSWORD=password;"; 

    //introduce a connection with mySQL database 
    using(MySqlConnection cnMySQL = new MySqlConnection(connString))
    {
      //create your mySql command object 
      using(MySqlCommand cmdMySQL = cnMySQL.CreateCommand())
      { 
            //set the command text (query) of the mySQL command object 
            cmdMySQL.CommandText = "select * from testdata"; 
            cmdMySql.CommandType = CommandType.Text;
            cmdMySql.Connection = cnMySql;

            cnMySql.Open();
            //create your mySQL reader object 
            using(MySqlDataReader reader = cmdMySQL.ExecuteReader())
            {

                while(reader.Read())
                {
                    userRecords.Add(new UserRecord() { Id = reader.GetInt32(reader.GetOrdinal("id"), Name = reader.GetString(reader.GetOrdinal("name")}
                }

            }

    }

  }

  return userRecords.ToArray();

}

您可能希望返回一个对象,如:

public class UserRecord
{

    public UserRecord() { }

    public int Id { get; set; }

    public string Name { get; set; }

}

请注意,这只是一个示例,您可能不会以这种方式构建代码。 例如,您实际上可能会在UserRecord上放置一个返回用户记录的方法,这将与数据访问类或类似方法交互以连接到数据库。 这样你就可以在任何地方分享UserRecord。

您可能还想考虑要返回的内容。 DataTable适用于.Net客户端,但非常繁重。 最好只包含您需要的数据的轻量级对象。

请注意,您还希望将DAO调用包装在Using语句中。 这样可以确保在离开最后一个使用语句时(或者抛出异常时)正确处理数据访问对象。

获得阅读器后,您可以使用以下内容遍历每一行:

while (reader.Read())
{
   int id = (Int32)reader["MyId"];
   string name = reader["Name"] as String;
}

您还可以使用阅读器填充DataSet对象,如果您只想从Web服务返回该对象,这可能会有所帮助:

DataSet ds = new DataSet();
ds.Load(reader, LoadOption.OverwriteChanges, "TestData");

我还建议您在完成阅读后关闭阅读器:

reader.Close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM