调用SQL数据并在C#变量中设置信息时出错



我编写了一个程序,用于从数据库(SQL Server(发送电子邮件数据

public int MailServerID { get; set; }
public string MailServerUserName { get; set; }
public string MailServerUserPassword { get; set; }
public string MailServerSMTPServerName { get; set; }
public bool MailServerRequiredSSL { get; set; }
public int MailServerSMTPPortNumber { get; set; }
public bool MailServerActive { get; set; }
public string MailServerDescription { get; set; }

这些是我的变量。

public List<csMailServer> GetMailServerDetailsActive()
{
List<csMailServer> MyList = new List<csMailServer>();
DataTable dt = new DataTable();
DbCommand MyCommand = GozargahCRUD.CreateCommandProcedure();
try
{
MyCommand.CommandText = "sp_GetMailServerDetailsActive";
DbParameter param;
param = MyCommand.CreateParameter();
param.DbType = DbType.Int32;
param.ParameterName = "@Ret";
param.Direction = ParameterDirection.ReturnValue;
MyCommand.Parameters.Add(param);
dt = GozargahCRUD.ExecuteReader(MyCommand);
MyList = (from DataRow dr in dt.Rows
select new csMailServer()
{
MailServerID = Convert.ToInt32(dr["MailServerID"]),
MailServerUserName = dr["MailServerUserName"].ToString(),
MailServerUserPassword = dr["MailServerUserPassword"].ToString(),
MailServerSMTPServerName = dr["MailServerSMTPServerName"].ToString(),
MailServerRequiredSSL = Convert.ToBoolean(dr["MailServerRequiredSSL"]),
MailServerSMTPPortNumber = Convert.ToInt32(dr["MailServerSMTPPortNumber"]),
MailServerActive = Convert.ToBoolean(dr["MailServerActive"]),
MailServerDescription = dr["MailServerDescription"].ToString()
}).ToList();
return MyList;
}
catch (Exception err)
{
throw;
}
}

这是我的服务器端代码

这里,它只发送TRUE的数据,这只是一个数据

到目前为止,所有的东西都正常工作,程序运行良好

但是当我调用SendMail方法时:

public bool SendMail(string to, string subject, string body)
{
try
{
GetMailServerDetailsActive();
MailMessage message = new MailMessage();
message.From = new MailAddress(MailServerUserName,"Exynos Support");
message.To.Add(to);
message.Subject = subject;
message.IsBodyHtml = true;
message.BodyEncoding = Encoding.UTF8;
message.Priority = MailPriority.Normal;
message.Body = body;
SmtpClient client = new SmtpClient(MailServerSMTPServerName);
client.Port = MailServerSMTPPortNumber;
client.Credentials = new NetworkCredential(MailServerUserName , MailServerUserPassword);
client.EnableSsl = Convert.ToBoolean(MailServerRequiredSSL);
client.Send(message);
return true;
}
catch (Exception Err)
{
throw;
}
}

代码上方定义的变量为空

问题出在哪里?

谢谢大家!

您正在创建MyList对象并返回它,但调用者没有对它做任何操作。您希望设置公共属性的值。

听起来数据表将只包含一行。在这种情况下,您根本不需要列表——只需要数据表中的一个数据行。

首先,将GetMailServerDetailsActive的返回类型更改为void。

然后更改:

MyList = (from DataRow dr in dt.Rows
select new csMailServer()
{
MailServerID = Convert.ToInt32(dr["MailServerID"]),
MailServerUserName = dr["MailServerUserName"].ToString(),
MailServerUserPassword = dr["MailServerUserPassword"].ToString(),
MailServerSMTPServerName = dr["MailServerSMTPServerName"].ToString(),
MailServerRequiredSSL = Convert.ToBoolean(dr["MailServerRequiredSSL"]),
MailServerSMTPPortNumber = Convert.ToInt32(dr["MailServerSMTPPortNumber"]),
MailServerActive = Convert.ToBoolean(dr["MailServerActive"]),
MailServerDescription = dr["MailServerDescription"].ToString()
}).ToList();
return MyList;

对此:

DataRow dr = dt.Rows[0];
MailServerID = Convert.ToInt32(dr["MailServerID"]);
MailServerUserName = dr["MailServerUserName"].ToString();
MailServerUserPassword = dr["MailServerUserPassword"].ToString();
MailServerSMTPServerName = dr["MailServerSMTPServerName"].ToString();
MailServerRequiredSSL = Convert.ToBoolean(dr["MailServerRequiredSSL"]);
MailServerSMTPPortNumber = Convert.ToInt32(dr["MailServerSMTPPortNumber"]);
MailServerActive = Convert.ToBoolean(dr["MailServerActive"]);
MailServerDescription = dr["MailServerDescription"].ToString();

最新更新