我有一张表注册。我想检查文本框中的三个数据和表中的数据以查找重复数据,并且还希望为每个比较生成单独的弹出消息。即,如果已经使用了用户名,我想显示用户名存在。同样对于AdminNo和RegitrationNo。 后端代码是:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
conn.Open();
String str = "INSERT INTO Register (Name,AdminNo,RegisterNo,Branch,DoB,Address,Mobile,Email,Username,Password) VALUES('" + TextBoxName.Text + "','" + Convert.ToInt64(TextBoxadmin.Text) + "','" + TextBOxreg.Text + "','" + DrpBranch.SelectedItem + "','" + Convert.ToDateTime(DoB.Text) + "','" + address.Text + "','" + mobno.Text + "','" + email.Text + "','" + user.Text + "','" + pass.Text + "')";
SqlCommand cmd = new SqlCommand(str, conn);
cmd.ExecuteNonQuery();
这是表格的插入功能。
private bool UserExist()
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("Select * From Register Where AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"' OR Username='"+user.Text+"' OR RegisterNo='"+TextBOxreg.Text+"'");
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
SqlDataReader rdr;
rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
return true;
}
else
{
return false;
}
conn.Close();
}
这是我的重复检查功能,您可以看到我使用OR运算符检查了副本。 如果发现任何重复,则返回true。 请提供一种单独查找副本并显示单独消息的方法。
答案 0 :(得分:0)
我不是C ++或MS SQL的专家,但我认为这个解决方案可能有用。如果语法不正确,我很抱歉(我没有简单的方法来验证它),所以请随意根据需要进行调整,但想法如下。您可以按如下方式修改SQL语句:
select
case
when
AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"'"
then
CAST(1 AS BIT)
else
CAST(0 AS BIT)
end as AdminYes,
case
when
Username='"+user.Text+"'"
then
CAST(1 AS BIT)
else
CAST(0 AS BIT)
end as UsernameYes,
case
when
RegisterNo='"+TextBOxreg.Text+"'"
then
CAST(1 AS BIT)
else
CAST(0 AS BIT)
end as RegisterNoYes
From Register Where AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"' OR Username='"+user.Text+"' OR RegisterNo='"+TextBOxreg.Text+"'"
您可以在:shatement
中执行此查询SqlCommand cmd = new SqlCommand(sqlStatement);
其中sqlStatement是我在上面发布的内容。然后当你使用阅读器时,你可以检查rdr.getBoolean(0),如果它返回true,那么这意味着你得到了管理员副本,如果你得到rdr.getBoolean(1)为真,那么它' sa用户名重复,如果你让rdr.getBoolean(3)等于true,那么它就是RegiserNo重复。
答案 1 :(得分:0)
您应该创建一个存储过程 - 并将@AdminNo,@ UserName和@RegisterNo作为参数传递。
存储过程可以返回a
- 自定义用户定义类型,
- varchar(max),内容为xml或
- 只是一个普通的表结果集
只要你能“传递”一个表(不是标量响应),实际格式就无关紧要了
sproc可以按照
的方式做点什么Select 'AdminNo' as [FieldName], count(*) as [CountOfRecords] From Register Where AdminNo = @AdminNo
UNION ALL
Select 'UserName', count(*) From Register Where UserName = @UserName
UNION ALL
Select 'RegisterNo', count(*) From Register Where RegisterNo = @RegisterNo
然后,在UserExist例程中,您必须执行ExecuteReader并读取所有行。 您将始终有三行(一个用于AdminNo,一个用于UserName,一个用于RegisterNo),您可以在每个行中使用计数 - 如果count> 0然后有重复
答案 2 :(得分:0)
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace DemoNameSpace
{
public class DemoClassDAL
{
private CheckResult UserExist()
{
CheckResult result = CheckResult.NoDuplicate;
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString))
{
SqlCommand cmd = new SqlCommand(@"select top 1
case
when AdminNo = @AdminNo then 'AdminExists'
when Username = @UserName then 'UserExists'
when RegisterNo = @RegisterNo then 'RegisterNoExists'
end as Result
From Register");
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
var dbresult = cmd.ExecuteScalar();
conn.Close();
if (dbresult != DBNull.Value)
{
Enum.TryParse(dbresult.ToString(), out result);
}
}
return result;
}
}
public enum CheckResult
{
NoDuplicate,
AdminExists,
UserExists,
RegisterNoExists
}
}