问题描述
我在一个简单的注册页面,用户无法进入同一个用户名或电子邮件的工作,我做了一个code是prevent从输入用户名用户和它的工作,但是当我试着以prevent从entring相同的用户名或电子邮件没有工作的用户。
和我的问题是,我怎样才能添加另一个条件,用户无法进入已经存在的电子邮件吗?
我试图做这个code,但我以前不工作:
保护无效Button_Click(对象发件人,EventArgs的发送)
{
SqlConnection的CON =新的SqlConnection(ConfigurationManager.ConnectionStrings [的ConnectionString]的ConnectionString);
CMD1的SqlCommand =新的SqlCommand(从表中选择1,其中名称= @用户名,CON);
的SqlCommand CMD2 =新的SqlCommand(从表中选择1,其中电子邮件= @ USEREMAIL,CON); con.Open();
cmd1.Parameters.AddWithValue(@用户名,Name_id.Text);
cmd2.Parameters.AddWithValue(@ USEREMAIL,Email_id.Text); 使用(VAR DR1 = cmd1.ExecuteReader())
{
如果(dr1.HasRows)
{
Label1.Text =用户名已经存在;
}
使用(VAR DR2 = cmd2.ExecuteReader())
{
如果(dr2.HasRows)
{
Label1.Text =电子邮件已存在;
}
其他
{
dr1.Close();
dr2.Close();
//添加新用户
con.Close();
}
}
}
}
但我得到这个错误:
Like I said in my comment your design is bad !
First you should have Data Access Layer. This should be project in big solutions but in your case you can put it like new directory. In this directory you create SqlManager class here is the code:
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();
}
}
}
After that you should have Business Object Layer. In bigger solution is project in your case directory. If you are in the page TaxesEdit.aspx, you should add Tax.cs class in the BO(business object).
Example of methods for the class, for your first button:
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);
}
You fetch all the needed data in datasets. After that you make checks like taxesDst.Tables[0].Rows.Count > 0 (or == 0)
For Insert you can have method like this:
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);
}
For this you need to have property TableName in the current BO class.
In this case this methods can be used everywhere and you need only one line of code to invoke them and no problems like yours will happen.
这篇关于检查用户名或用户电子邮件地址已存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!