[WebMethod]
    public string cx()
    {
       // DataSet thisdataset = new DataSet();
        string str = "Data Source=localhost;Initial Catalog=english;Persist Security Info=true;User ID=sa;Password=123";
    
    SqlConnection Con = new SqlConnection(str);
    string comStr = "select * from dict ";
    SqlCommand Com = new SqlCommand(comStr, Con); Con.Open();
    SqlDataReader rd = Com.ExecuteReader();
   while (rd.Read())
{
return rd.GetString(0)+rd.GetString(1);
}
 rd.Close();
 Con.Close();
}
程序执行后不能返回查询结果,显示内部服务器错误。查询结果不是用sqlDataReader对象的GetString(0方法来返回吗?
而且存在一个警告,提示return以后的语句无效,确实return之后的语句无法执行,但sqlDataReader必须是连接读取,将rd.Close();语句提前将无法返回结果;
请高手指教,如何将服务端的sql查询结果通过函数来返回给客户端,C#编写的服务端如何与j2me编写的客户端相连接?

解决方案 »

  1.   

    SqlDataReader rd = Com.ExecuteReader();
    String str = "";
    while (rd.Read())
    {
     str = rd.GetString(0)+rd.GetString(1);
    }
     rd.Close();
     Con.Close();
    return str;
    }
      

  2.   

    有多个问题。
     while (rd.Read())
    {
    return rd.GetString(0)+rd.GetString(1);
    }
    1.只返回了第一条数据。
    可以定义一个接收数据的类型,追加数据后返回,
    或者直接返回SqlDataReader 实例。rd.Close();
     Con.Close();
    2.放在try catch finally结构中。
    try
      ...
    finally
      rd.Close();
      Con.Close();3.显示内部服务器错误,代码不全,无法得出结论。
      

  3.   

    在下不才,只是想通过Read()方法来判断下条记录有无,来构成循环用return把各条查询结果返回给客户端。但具体该用什么方法我不大会,谢谢大家的帮助,如果还有什么好办法,望指教。
      

  4.   

    string str="";
    using(SqlConnection Con = new SqlConnection(str))
    {
    string comStr = "select * from dict ";
    SqlCommand Com = new SqlCommand(comStr, Con); 
    Con.Open();
    SqlDataReader rd = Com.ExecuteReader();
    if(rd.hasRows)
    {
     while(rd.Read())
     {
      str+=rd.GetString(0)+rd.GetString(1);
     }
    }
     rd.Close();
     Con.Close();
    }
    return str;
      

  5.   

    rd.GetString(0)+rd.GetString(1)返回的是第一列和第二列的结果集,应把它赋给一个变量,在关闭连接。象1楼那样
      

  6.   


    DataTable dt=new DataTable();
    SqlDataAdapter sda=new SqlDataAdapter(sqlstr,con);
    con.Open();
    sda.Fill(dt);
    con.Close();
    return dt;
      

  7.   

    按照大家指点,已经没有语法错误,但是结果还是无法返回。把程序放在这,麻烦大家连接一下自己机器上的数据库调试一下。
    using System;
    using System.Web;
    using System.Data;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Data.SqlClient;
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Service : System.Web.Services.WebService
    {
        [WebMethod]
        public string cx()
        {
           
            string str = "Data Source=localhost;Initial Catalog=english;Persist Security Info=true;User ID=sa;Password=123";        string s = "";
            SqlConnection Con = new SqlConnection(str);
            
                string comStr = "select * from dict ";
                SqlCommand Com = new SqlCommand(comStr, Con);
                Con.Open();
                SqlDataReader rd = Com.ExecuteReader();
                if (rd.HasRows)
                {
                    while (rd.Read())
                    {
                       s +="\n"+ rd.GetString(0) + rd.GetString(1);
                    }
                }
                rd.Close();
                Con.Close();
            
            return s;
                
        //public Service () {
            
            //如果使用设计的组件,请取消注释以下行 
            //InitializeComponent(); 
        //}
       
       
        
    }
    }
      

  8.   

    hxwangcong 您提供的方法我试用成功了,十分感谢!我第一次在这发帖,没想到有这么多高手指教,真的很感动,对我的学习有很大的帮助作用。真心感谢大家!
      

  9.   


    不客气。但是与SqlDataReader相比,SqlDataAdapter的效率会低一点点。还有,我看了你的代码,建议你使用StringBuilder,而不要用字符串拼接,这样在数据量较大时,速度会快很多。