检查用户名或用户电子邮件已存在

2023-11-21

我正在一个简单的注册页面中工作,用户无法输入相同的用户名或电子邮件,我编写了一个代码来阻止用户输入用户名并且它起作用了,但是当我试图阻止用户输入相同的用户名时或通过电子邮件发送它不起作用。

我的问题是,“如何添加另一个条件,使用户无法输入已存在的电子邮件?”

我尝试在这段代码中执行此操作,但没有成功:

protected void Button_Click(object sender, EventArgs e)
{
  SqlConnection con = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString );
  SqlCommand cmd1 = new SqlCommand("select 1 from Table where Name =@UserName", con);
  SqlCommand cmd2 = new SqlCommand("select 1 from Table where Email=@UserEmail", con);

  con.Open();
  cmd1.Parameters.AddWithValue("@UserName", Name_id.Text);
  cmd2.Parameters.AddWithValue("@UserEmail", Email_id.Text); 

  using (var dr1 = cmd1.ExecuteReader())
  {
    if (dr1.HasRows)
    {
      Label1.Text = "user name already exists";
    }
    using (var dr2 = cmd2.ExecuteReader())
    {
      if (dr2.HasRows)
      {
        Label1.Text = "email already exists";
      }
      else
      {
        dr1.Close();
        dr2.Close();
        //add new users
        con.Close();
      }
    }
  }  
}

但我收到此错误:

已经有一个打开的 DataReader 与此命令关联,必须先将其关闭。


就像我在评论中说的,你的设计很糟糕!

首先你应该有数据访问层。这应该是大型解决方案中的项目,但在您的情况下,您可以将其放在新目录中。在此目录中创建 SqlManager 类,代码如下:

public class SqlManager
{

    public static string ConnectionString
    {
        get
        {
            return ConfigurationManager.ConnectionStrings["DevConnString"].ConnectionString;
        }
    }

    public static SqlConnection GetSqlConnection(SqlCommand cmd)
    {
        if (cmd.Connection == null)
        {
            SqlConnection conn = new SqlConnection(ConnectionString);

            conn.Open();

            cmd.Connection = conn;

            return conn;
        }

        return cmd.Connection; 
    }

    public static int ExecuteNonQuery(SqlCommand cmd)
    {
        SqlConnection conn = GetSqlConnection(cmd);

        try
        {
            return cmd.ExecuteNonQuery();
        }
        catch
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
    }

    public static object ExecuteScalar(SqlCommand cmd)
    {

        SqlConnection conn = GetSqlConnection(cmd);

        try
        {
            return cmd.ExecuteScalar();
        }
        catch
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
    }

    public static DataSet GetDataSet(SqlCommand cmd)
    {
        return GetDataSet(cmd, "Table");
    }

    public static DataSet GetDataSet(SqlCommand cmd, string defaultTable)
    {
        SqlConnection conn = GetSqlConnection(cmd);

        try
        {
            DataSet resultDst = new DataSet();

            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
            {
                adapter.Fill(resultDst, defaultTable);
            }

            return resultDst;
        }
        catch
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
    }


    public static DataRow GetDataRow(SqlCommand cmd)
    {
        return GetDataRow(cmd, "Table");
    }

    public static DataRow GetDataRow(SqlCommand cmd, string defaultTable)
    {
        SqlConnection conn = GetSqlConnection(cmd);

        try
        {
            DataSet resultDst = new DataSet();

            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
            {
                adapter.Fill(resultDst, defaultTable);
            }

            if (resultDst.Tables.Count > 0 && resultDst.Tables[0].Rows.Count > 0)
            {
                return resultDst.Tables[0].Rows[0];
            }
            else
            {
                return null;
            }
        }
        catch
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
    }
}

之后您应该拥有业务对象层。在更大的解决方案中,项目位于您的案例目录中。如果您在TaxesEdit.aspx页面中,您应该在BO(业务对象)中添加Tax.cs类。

第一个按钮的类方法示例:

public DataSet GetTaxesByUserName(string userName)
{
     SqlCommand cmd = new SqlCommand(@"

        select 1 from Table where Name =@UserName");

      cmd.Parameters.AddWithValue("@UserName", userName);

      return DA.SqlManager.GetDataSet(cmd);
}

您获取数据集中所有需要的数据。之后,您进行类似taxDst.Tables[0].Rows.Count > 0(或== 0)的检查

对于插入,你可以有这样的方法:

    public virtual void Insert(params object[] colValues)
    {
        if (colValues == null || colValues.Length % 2 != 0)
            throw new ArgumentException("Invalid column values passed in. Expects pairs (ColumnName, ColumnValue).");

        SqlCommand cmd = new SqlCommand("INSERT INTO " + TableName + " ( {0} ) VALUES ( {1} )");

        string insertCols = string.Empty;
        string insertParams = string.Empty;

        for (int i = 0; i < colValues.Length; i += 2)
        {
            string separator = ", ";
            if (i == colValues.Length - 2)
                separator = "";

            string param = "@P" + i;

            insertCols += colValues[i] + separator;
            insertParams += param + separator;

            cmd.Parameters.AddWithValue(param, colValues[i + 1]);
        }

        cmd.CommandText = string.Format(cmd.CommandText, insertCols, insertParams);

        DA.SqlManager.ExecuteNonQuery(cmd);
    }

为此,您需要在当前 BO 类中具有属性 TableName。

在这种情况下,这个方法可以在任何地方使用,您只需要一行代码来调用它们,并且不会发生像您这样的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查用户名或用户电子邮件已存在 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Asp.net MVC 路由 - 防止通过约束路由到 XML 文件

    我正在尝试找到一种方法来阻止用户访问特定的 xml 文件 我尝试过做 routes MapRoute SiteMap SiteMap siteMap xml new new isLocal new LocalHostRouteConstra
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • Jenkins - 将构建推广到不同的环境

    我希望获得一些关于通过其环境促进构建的最佳方式的指导 我们有 3 个环境 DEV STAGING PROD DEV Jenkins 构建在持续集成设置中运行 当代码签入到 subversion 时 Jenkins 将运行新的构建 清理 编译
  • 实例化一个特质意味着什么?

    我是 Scala 新手 在 O Reilly 的 Scala 编程 一书中 作者展示了一些实例化特征的代码 鉴于特征在某种程度上类似于 Java 中的接口 尽管我知道特征是作为字节代码中的类实现的 实例化特征意味着什么 以及适当的用例 设计
  • 从公钥正确创建 RSACryptoServiceProvider

    我目前正在尝试创建一个RSACryptoServiceProvider仅来自解码的 PEM 文件的对象 经过几天的搜索 我确实设法找到了一个可行的解决方案 但它还不是一个可以投入生产的解决方案 简而言之 为了创建一个RSACryptoSer
  • 从 ASP.NET MVC 中的现有数据库生成种子代码

    我想知道是否有人遇到过类似的挑战 我有一个数据库 其中包含一些从 Excel 文件进行 ETL 处理 导入和转换 的数据 在我的 ASP NET MVC Web 应用程序中 我使用 Code First 方法并在每次数据库更改时删除 创建
  • 如何使 pyplot.subplots 内的图像更大

    我需要在网格中显示20张图像 我的代码如下 def plot matric demo img nrows ncols fig ax plt subplots nrows nrows ncols ncols cur index 0 for r
  • Python 列表字典中的项目计数

    我有一个列表字典 我想为其添加一个值到特定列表 我有以下列表词典 d a 4 Adam 2 b 3 John 4 c 4 Adam 3 d 4 Bill 3 e 4 Bob f 4 Joe g 4 Bill 我想本质上计算出名字的数量并返回
  • 使用scipy高斯核密度估计计算CDF逆

    The gaussian kde函数于scipy stats有一个功能evaluate可以返回输入点的 PDF 值 我正在尝试使用gaussian kde估计逆 CDF 其动机是生成一些输入数据的蒙特卡罗实现 这些数据的统计分布是使用 KD
  • 使用 Pandoc 将 Markdown 转换为 PDF 时使用 CSS

    我正在 OS X 上尝试 Pandoc 迄今为止的结果令人印象深刻 然而 一个阻碍性问题是让 CSS 样式在内联代码示例上工作 我正在从 Markdown 转换为 PDF 我的源代码中有这个字符串 Create a simple HTML
  • 如何找到给定半径内最近的城市?

    您是否知道一些实用程序或网站 我可以在其中提供美国城市 州和以英里为单位的径向距离作为输入 并且它会返回该半径内的所有城市 Thanks 我是这样做的 您可以获得城市 街道 邮政编码及其纬度和经度的列表 我一时想不起我们是从哪里得到的 ed
  • ASP.NET MVC OWIN 和 SignalR - 两个 Startup.cs 文件

    我的项目有问题 我使用 ASP NET MVC 和 ASP NET Identity 2 0 进行身份验证 并将 SignalR 添加到项目中 所以现在我有两个 Startup cs 文件 根目录中 MVC 中的第一个 assembly O
  • Python 2.7 Cx_Freeze:导入错误:没有名为 __startup__ 的模块

    我正在尝试使用 cx Freeze 将 Python 中的 hello world 程序编译为 Linux 上的独立二进制文件 包 运行 cx Freeze 时 它 会完成且不会出现错误 但是当我尝试运行生成的可执行文件时 出现错误 Imp
  • 为什么 jQuery 在我的 GreaseMonkey 脚本中加载两次

    由于某种原因 我的 Firefox4 GreaseMonkey 脚本加载 jQuery 两次 我复制并粘贴了以下代码片段 测试 警报显示两次 Regards var Add jQuery function if typeof unsafeW
  • 在 IE 9 中通过 javascript 更改文档正文字体大小时选择框截断文本

    IE 9 对我来说表现得很奇怪 我有一个页面字体大小更改控件 可以保存用户设置 然后在文档中将正文字体大小设置为该大小 它工作正常 问题是 当加载带有下拉菜单的页面时 在 IE 9 中 有时文本会被截断 我已将代码简化为这个 jsfiddl
  • 为什么 NSFetchedResultsController 没有用新数据更新?

    我的核心数据模型有两个实体 Author and Book具有一对多关系 一位作者 gt 多本书 在主视图中 我显示一个书籍列表 其中每个单元格包含书籍名称和作者姓名 该视图还分为多个部分 每个部分的标题是作者姓名 请注意 author n
  • UICollectionViewCell 子类的 contentView.translatesAutoResizingMaskToConstraints 是否应该设置为“false”?

    TL DR 当尝试通过自动布局调整 UICollectionViewCells 的大小时 即使是一个简单的示例 您也可以轻松获得自动布局警告 我们应该设置contentView translatesAutoResizingMaskToCon
  • 从 C# 代码内部访问 F# 列表

    我编写了一个 F 模块 其中包含一个列表 module MyModule type X valuex float32 let l for i in 1 10 gt valuex 3 3f 现在 我尝试从 C 类访问先前定义的列表 但我不知道
  • 如何在 javascript 中动态创建具有值数组的地图

    我有这个要求 根据函数中传递的参数数量 我需要在映射中创建那么多条目 假设我有一个函数 myfunc1 a b c 我需要一张键为 a b 和 c 的映射 并且每个键可以有多个值 但问题是我事先不知道这些键会有多少值 当值出现时 我需要将它
  • openssl 中是否有任何 C API 可以从给定字符串派生密钥

    我需要 openssl 库中的 C API 来从给定的字符串派生密钥 我在哪里可以获得这方面的示例源代码 执行此操作的标准算法是 PBKDF2 PBKDF2 的缩写 基于密码的密钥派生函数版本 2 OpenSSL 中有一个 PBKDF2 的
  • 确定我的电脑是否支持硬件虚拟化

    一般来说 如何确定一台 PC 是否支持硬件虚拟化 我使用 VirtualPC 来设置并行测试环境 并且我会享受一点速度提升 下载这个 http www cpuid com cpuz php 还要检查 http en wikipedia or
  • 检查用户名或用户电子邮件已存在

    我正在一个简单的注册页面中工作 用户无法输入相同的用户名或电子邮件 我编写了一个代码来阻止用户输入用户名并且它起作用了 但是当我试图阻止用户输入相同的用户名时或通过电子邮件发送它不起作用 我的问题是 如何添加另一个条件 使用户无法输入已存在