我想从我的Web服务方法中以“abc#xyz#ghi#tru”(其中#是分隔符)的形式返回一个字符串数组。但是我无法做到。这是我目前的网络服务代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace WebService10
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment
the following line.
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
String[] result=new String[40];
String[] result2 = new String[40];
[WebMethod]
public String[] getData()
{
SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123");
try
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "select count(*) from names where name =@name";
SqlDataReader myReader = myCommand.ExecuteReader();
//while
for(int i=0;i<40;i++)
{
if (myReader.Read())
{
result[i]= myReader["name"].ToString();
result2[i] = result[i] + "#";
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
myConnection.Close();
}
return result2;
}
}
}
有谁能告诉我我的代码有什么问题?
答案 0 :(得分:2)
试试这个:
我更改了查询(BTW:查询仍然没有多大意义,但我不知道你真正想要的是什么),结果类型和循环。
您忘了将参数传递给查询。
另外:更改异常处理;在服务器端写入控制台并不是一个好主意。
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public String getData(string nameFilter)
{
String result = "";
SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123");
try
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "select name from names where name =@name";
myCommand.Parameters.AddWithValue("@name", nameFilter);
SqlDataReader myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
if(result.Length > 0)
{
result += "#";
}
result += myReader["name"].ToString();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
myConnection.Close();
}
return result;
}
}
修改强>
我更喜欢不同的方法:
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public String[] getData(string nameFilter)
{
var names = new List<string>();
SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123");
try
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "select name from names where name = @name";
myCommand.Parameters.AddWithValue("@name", nameFilter);
SqlDataReader myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
names.Add(myReader["name"].ToString());
}
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
}
finally
{
myConnection.Close();
}
return names.ToArray();
}
}
答案 1 :(得分:2)
[WebMethod]
public string getData()//changed to return string
{
SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123");
try
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "select name from names";//you can make it select distinct
SqlDataReader myReader = myCommand.ExecuteReader();
string toReturn = "";
while(myReader.Read())
{
if (myReader.Read())
{
toReturn += myReader["name"].ToString() + "#";
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
myConnection.Close();
}
return toReturn; //# as delimiter
}
答案 2 :(得分:1)
首先,您的查询仅返回数字而不是行集。所以你应该使用这样的SQL:
select name from names
其次,要返回数组,您可以使用List而不是预定义的数组: 我将使用以下方法:
var result = new List<string>();
while(myReader.Read())
{
result.Add(reader["name"].ToString() + "#");
}
return result.ToArray();
或者如果你想返回一个字符串:
return string.Join("#", result.ToArray())