我第一次尝试在.net。
中使用 webservice我的代码c#如下,但我不明白,因为字符串结果未分配。
如果尝试删除行 if(reader.HasRows)中的控件,则会分配字符串结果。
如何检查用户表中是否存在字符串电子邮件?
我的代码背后的错误在哪里?
using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Web.Services;
[WebService(Namespace = "http:/.../ws")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ws : System.Web.Services.WebService
{
[WebMethod]
public string es(string email)
{
string result;
using (OdbcConnection conn =
new OdbcConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString))
{
using (OdbcCommand command = new OdbcCommand())
{
command.Parameters.Clear();
command.CommandText = "Select Email From tblUsers where email = ?;";
command.Parameters.AddWithValue("param1", email.ToString());
command.Connection = conn;
conn.Open();
command.CommandType = CommandType.Text;
OdbcDataReader reader = command.ExecuteReader();
try
{
if (reader.HasRows)
{
result = "1";
}
}
catch (Exception ex)
{
return ex.ToString();
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
return result;
}
}
}
答案 0 :(得分:1)
首先关闭email
已经是一个字符串,所以你不需要 .ToString()它。
其次,(除非你在使用.NET 3.0之前)不要打扰经典的ASMX Web服务并使用WCF。关于IIS上托管的WCF Web服务,Web上有大量资源
第三,您应该在运行任何email != null
之前对您的电子邮件参数执行空检查,或者更好的是,如果使用.NET 3.5或更早版本,还要检查空字符串string.IsNullOrWhiteSpace(email)
,使用 IsNullOrEmpty
最后,要回答您的问题,要检查您的第一列(第0列),电子邮件是否为空,您可以执行reader.IsDBNull(0)
,但要测试它是否为空字符串,你需要读取值(假设它不为空)然后检查,除非你通过SQL(google it)这样做
此外,使用SqlCommand,SqlDataReader和SqlConnection。除非您与其他数据库系统(SQL Server除外)连接,并且绝对必须使用ODBC。