【问题标题】:SQL commands not working in C# (ASP.NET web forms)SQL 命令在 C# 中不起作用(ASP.NET Web 表单)
【发布时间】: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


【解决方案1】:

试试这个方法:

        using (SqlConnection conn = new SqlConnection(cs))
        {
            conn.Open();
            string checkEmail = "SELECT * FROM tbl_users WHERE User_Email = @User";

            SqlCommand emailCMD = new SqlCommand(checkEmail, conn);
            emailCMD.Parameters.Add("@User", SqlDbType.NVarChar).Value = email.Text;

            SqlDataAdapter da = new SqlDataAdapter(emailCMD);
            SqlCommandBuilder daU = new SqlCommandBuilder(da);

            DataTable emailRecs = new DataTable();
            emailRecs.Load(emailCMD.ExecuteReader());

            DataRow OneRec;
            if (emailRecs.Rows.Count == 0)
            {
                OneRec = emailRecs.NewRow();
                emailRecs.Rows.Add(OneRec);
            }
            else
            {
                // record exists
                OneRec = emailRecs.Rows[0];
            }
            // modify reocrd
            OneRec["User_UID"] = User_UID;
            OneRec["User_Email"] = email.Text;
            OneRec["User_Status"] = "subscribed";
            email.Text = null;
            da.Update(emailRecs);
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多