C# 如何在ASP.NET MVC中将SQL Server行显示为电子邮件中的结果列表?
通过存储过程使用ASP.NET MVC和SQL Server,我试图向用户发送电子邮件 电子邮件应包含用户已确认的订单信息。此信息从数据库中检索 使用SQL查询,我只成功地显示了查询的第一个参数(请查看图片以查看电子邮件的内容) 控制器:C# 如何在ASP.NET MVC中将SQL Server行显示为电子邮件中的结果列表?,c#,sql-server,asp.net-mvc,stored-procedures,C#,Sql Server,Asp.net Mvc,Stored Procedures,通过存储过程使用ASP.NET MVC和SQL Server,我试图向用户发送电子邮件 电子邮件应包含用户已确认的订单信息。此信息从数据库中检索 使用SQL查询,我只成功地显示了查询的第一个参数(请查看图片以查看电子邮件的内容) 控制器: private void connection() { string constring = ConfigurationManager.ConnectionStrings["DeliveryCon"].ToString();
private void connection()
{
string constring = ConfigurationManager.ConnectionStrings["DeliveryCon"].ToString();
con = new SqlConnection(constring);
}
public JsonResult SendMailToUser()
{
connection();
con.Open();
SqlCommand command = new SqlCommand("select Email from Bestellung where BestellungId=(Select MAX(BestellungId) From Bestellung)", con);
SqlCommand command2 = new SqlCommand("select First_Name, Last_Name, Adresse, Email, Phone, Date, Time, Nbre_P, Items from Bestellung where BestellungId=(Select MAX(BestellungId) From Bestellung)", con);
string em = command.ExecuteScalar().ToString();
string sub = command2.ExecuteScalar().ToString();
con.Close();
bool result = false;
result = SendEmail(em, "Delivery : Your Order", sub);
return Json(result, JsonRequestBehavior.AllowGet);
}
public bool SendEmail(string toEmail, string subject, string emailBody)
{
try
{
string senderEmail = System.Configuration.ConfigurationManager.AppSettings["SenderEmail"].ToString();
string senderPassword = System.Configuration.ConfigurationManager.AppSettings["SenderPassword"].ToString();
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.EnableSsl = true;
client.Timeout = 100000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(senderEmail, senderPassword);
MailMessage mailMessage = new MailMessage(senderEmail, toEmail, subject, emailBody);
mailMessage.IsBodyHtml = true;
mailMessage.BodyEncoding = UTF8Encoding.UTF8;
client.Send(mailMessage);
return true;
}
catch(Exception ex)
{
return false;
}
}
视图:
编辑:
SqlDataReader reader = command2.ExecuteReader();
List<object[]> dataList = new List<object[]>();
if (reader.HasRows)
{
while (reader.Read())
{
object[] tempRow = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
tempRow[i] = reader[i];
}
dataList.Add(tempRow);
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
con.Close();
SqlDataReader=command2.ExecuteReader();
List dataList=新列表();
if(reader.HasRows)
{
while(reader.Read())
{
object[]tempRow=新对象[reader.FieldCount];
对于(int i=0;i
您可以使用ExecuteScalar
执行查询:
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略
这就解释了为什么你的电子邮件只包含名字
如果需要访问不同的列,请使用并获取返回的
SqlDataReader
上的数据。您可以使用ExecuteScalar
执行查询:
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略
这就解释了为什么你的电子邮件只包含名字
如果您需要访问不同的列,请使用并获取返回的
SqlDataReader
@Riokmji感谢您的回答,好的,我理解,我以前也尝试过,但是如何获取数据的问题,请您详细解释您的建议,有关详细信息,请参阅。@Riokmji感谢您的回答,好的,我理解,我以前也试过,但问题是如何获取数据,请您进一步解释您的建议,以获取更多信息。使用SqlDataReader
和ExecuteReader
获取结果,使用GetString
和列索引获取列值。@TetsuyaYamamoto这是我计划做的,但问题是我想在电子邮件中显示一个漏洞列表,而不是columnstring sub=DataReader.GetString(3)
=>这是您想要的吗?如果选择的收件人不止一个,请考虑使用<代码>清单> Ad()/代码>,然后使用<代码> PROACH < /Cord-Road从列表中执行<代码> SeNemail E/CONT>。@ TtuyyayaMato to问题是:我应该写什么而不是“子”:结果= SeDemail(EM,“交货:您的订单”,子);SendMail
的第三个参数是string emailBody
,对吗?如果您想包含除单个收件人名称以外的其他文本,请使用收件人列表,并像邮件合并一样将其与邮件正文的某些部分连接起来。据我所知,传递的值必须具有与参数相同的类型。使用SqlDataReader
和ExecuteReader
获取结果,并使用GetString
和列索引获取列值。@Tetsuyayayamamoto这是我计划做的,但问题是我想在电子邮件中显示一个漏洞列表,而不是columnstring sub=DataReader.GetString(3)
=>这是您想要的吗?如果选择的收件人不止一个,请考虑使用<代码>清单> Ad()/代码>,然后使用<代码> PROACH < /Cord-Road从列表中执行<代码> SeNemail E/CONT>。@ TtuyyayaMato to问题是:我应该写什么而不是“子”:结果= SeDemail(EM,“交货:您的订单”,子);SendMail
的第三个参数是string emailBody
,对吗?如果您想包含除单个收件人名称以外的其他文本,请使用收件人列表,并像邮件合并一样将其与邮件正文的某些部分连接起来。据我所知,传递的值必须具有与参数相同的类型。
SqlCommand command2 = new SqlCommand("select First_Name
SqlDataReader reader = command2.ExecuteReader();
List<object[]> dataList = new List<object[]>();
if (reader.HasRows)
{
while (reader.Read())
{
object[] tempRow = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
tempRow[i] = reader[i];
}
dataList.Add(tempRow);
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
con.Close();