c#内置的Web服务,用于从mySQL数据库检索数据
本文关键字:mySQL 数据库 检索 数据 用于 内置 Web 服务 | 更新日期: 2023-09-27 18:16:36
我试图在。net中建立一个web服务,这将从mySQL数据库检索数据。此web服务稍后将与显示此数据的windows窗体组合在一起。
到目前为止,我已经准备好了数据库,数据库和web服务之间的连接已经建立,表单也已经准备好了。
但是,我无法从表本身检索特定的信息位。谁能告诉我下一步该怎么做?我在谷歌上搜索了很多关于这个问题,但我仍然无法找到一个关于这个问题的好教程…如果你有任何想法,那么你能把链接也贴出来吗?提前感谢!
EXTRA INFORMATION:假设一个名为"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();
}
}
}
创建一个public方法,用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;
}
调用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上放一个返回用户记录的方法,这将与Data Access类或类似的类交互以连接到数据库。这样你就可以在任何地方共享UserRecord。
您可能还需要考虑返回的是什么。DataTable对于。net客户端来说是可以的,但是非常笨重。只包含所需数据的轻量级对象更可取。
注意,您还需要将DAO调用封装在Using语句中。这可确保在离开using语句的最后一个括号时(或抛出异常时)正确处置数据访问对象。
这里有几个选项。
首先,您可以摆脱DataReader,而使用DataAdapter来填充DataSet并返回完整的DataSet。(这可能是最简单的,但如果您打算从非-调用它,则它是最不友好的。网应用。)
其次,您可以实际使用阅读器,循环遍历数据以填充函数应该返回的任何业务对象…但是你没有给我们足够的时间来告诉你怎么做。
无论哪种方式,你的函数现在没有返回任何东西,你甚至没有标记是在一个WebMethod…我强烈建议回到MSDN中寻找例子。或者观看这个视频:http://www.asp.net/web-forms/videos/how-do-i/how-do-i-create-and-call-a-simple-web-service-in-aspnet
现在,你的代码和问题表明你还没有理解基础知识(这没什么错——我们都是从某处开始的),这个视频将涵盖它们。因为它的立场,你需要更多的帮助比我们可以提供在这个论坛,短显示你在哪里找到你需要的信息。(我希望我已经做到了)
获得阅读器后,可以使用with:
循环遍历每一行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:
reader.Close();