【发布时间】:2022-01-06 11:23:18
【问题描述】:
我的代码有问题。 我试图让用户能够提交他的电子邮件以订阅我的“通知我”服务,我最近没有编写任何代码,所以我有点困惑..
我正在尝试在我的 Online SQL Server 中插入、读取和更新数据。但似乎没有任何效果!我不知道为什么我尝试了我所知道的一切,我检查了一百万次,看起来不错。 另外,如果有任何错误,我的捕获应该显示给我,但即使这样也不起作用:(
看看这个,也许你的眼睛会看到我看不到的东西。
protected void btnSubmit_Click(object sender, EventArgs e)
{
string cs = ConfigurationManager.ConnectionStrings["notifyCS"].ConnectionString;
using (SqlConnection conn = new SqlConnection(cs))
{
conn.Open();
try
{
string checkEmail = "SELECT User_Email FROM tbl_users WHERE User_Email = @User_Email";
string checkSubscription = "SELECT User_Status FROM tbl_users WHERE User_Email = @User_Email";
string submitEmail = "INSERT INTO tbl_users (User_UID, User_Email, User_Status) VALUES (@User_UID, @User_Email, @User_Status)";
string submitEmail2 = "UPDATE tbl_users SET User_UID = @User_UID, User_Status = @User_Status WHERE User_Email = @User_Email";
SqlCommand emailCMD = new SqlCommand(checkEmail, conn);
SqlDataAdapter emailSDA = new SqlDataAdapter
{
SelectCommand = emailCMD
};
DataSet emailDS = new DataSet();
emailSDA.Fill(emailDS);
//if there is no email registered.
if (emailDS.Tables[0].Rows.Count == 0)
{
SqlCommand registerEmail = new SqlCommand(submitEmail, conn);
string User_UID = System.Guid.NewGuid().ToString().Replace("-", "").ToUpper();
registerEmail.Parameters.AddWithValue("@User_UID", HttpUtility.HtmlEncode(User_UID));
registerEmail.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
registerEmail.Parameters.AddWithValue("@User_Status", HttpUtility.HtmlEncode("subscribed"));
registerEmail.ExecuteNonQuery();
registerEmail.Dispose();
conn.Close();
conn.Dispose();
email.Text = null;
}
else if (emailDS.Tables[0].Rows.Count > 0)
{
using (SqlCommand checkSub = new SqlCommand(checkSubscription, conn))
{
checkSub.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
SqlDataReader sdr = checkSub.ExecuteReader();
if (sdr.HasRows)
{
string res = sdr["User_Status"].ToString();
if (res != "subscribed")
{
using (SqlCommand registerEmail2 = new SqlCommand(submitEmail2, conn))
{
string User_UID = System.Guid.NewGuid().ToString().Replace("-", "").ToUpper();
registerEmail2.Parameters.AddWithValue("@User_UID", HttpUtility.HtmlEncode(User_UID));
registerEmail2.Parameters.AddWithValue("@User_Email", HttpUtility.HtmlEncode(email.Text));
registerEmail2.Parameters.AddWithValue("@User_Status", HttpUtility.HtmlEncode("subscribed"));
registerEmail2.ExecuteNonQuery();
registerEmail2.Dispose();
conn.Close();
conn.Dispose();
email.Text = null;
}
}
else
{
conn.Close();
conn.Dispose();
Response.Redirect("index.aspx");
}
}
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
conn.Close();
if (conn.State != ConnectionState.Closed)
{
conn.Close();
conn.Dispose();
}
}
}
}
【问题讨论】:
-
如果通过它进行调试,
emailDS是否被正确填充? -
我希望您在具有
emailSDA.Fill(emailDS);的行上出现错误,因为这需要一个从未分配给选择命令的@User_ID参数。此时您将进入您的 catch 块,将消息写入响应并静默失败。 -
我最近没有编写任何代码 - 那么升级的好时机;使用 EF 会将这些内容归结为大约 5 行代码。
var x = emails.FirstOrDefault(..); if(x == default) emails.Add(...) else x.Blah = ...; SaveChanges() -
我没有在 checkEmail 字符串中添加任何参数 - 但这通常会导致异常“我认为必须声明标量变量 @x”.. 我以为你在那里说过没有错误..无论如何,你用一些橡皮鸭调试修复了它:D不错
标签: c# asp.net sql-server webforms