我正在创建一个Web服务,它将从数据库中获取数据并返回到json。但我无法获取数据。当我运行代码而不是结果时,我得到 " \ " System.Data.SqlClient.SqlDataReader \"" 所以现在尝试的是下面的内容。你可以帮助我纠正代码。
Iservice.cs
namespace SearchService
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string Search(string keyword);
}
}
service1.cs
namespace SearchService
{
public class Service1 : IService1
{
public string Search(string keyword)
{
var json = "";
var data = "";
SqlConnection sql_Search;
sql_Search = new SqlConnection("Data Source=.;Initial Catalog=student_info;Integrated Security=True");
sql_Search.Open();
SqlCommand SelectCommand = new SqlCommand("SELECT Student_ID,First_Name,Last_Name FROM record Where (First_Name Like '%" + keyword + "%')", sql_Search);
SelectCommand.ExecuteNonQuery();
SqlDataReader read = SelectCommand.ExecuteReader();
while (read.Read())
{
data = read.ToString();
}
JavaScriptSerializer JavaSerialzer = new JavaScriptSerializer();
json = JavaSerialzer.Serialize(data);
return json;
}
}
}
答案 0 :(得分:3)
因为你把它写成;
read.ToString()
它显然会返回该类的全名。
如果您想阅读列值,可以read[0]
,read[1]
和read[2]
等方式访问它们。或者您可以使用SqlDataReader
' s { {3}}。
顺便说一句,你应该总是使用GetXXX
methods。这种字符串连接对parameterized queries攻击是开放的。使用SQL Injection也可以处理您的连接,命令和阅读器。
答案 1 :(得分:0)
read.ToString()
将返回read
的类型,即“System.Data.SqlClient.SqlDataReader”。
您需要将数据作为对象读取并对其进行序列化。请参阅Convert rows from a data reader into typed results如何操作。
甚至更容易使用ORM生成类并从数据库中读取静态类型的对象,而不是从字符串构建查询(使用参数化查询),然后从该读取器构建对象。
但是有一个很多更多,从根本上错误的代码。您不应该从WCF服务返回包含在(可能)SOAP对象中的JSON字符串,使用正确的绑定并返回对象本身,或者使用WebAPI。