如果存在则显示消息,如果不存在则执行其他操作 ASP
If Exists Display a Message, If not, do something else ASP
我是 C# 编程的新手,我一直在所有网站上进行研究,我找到了一个答案,这就是我正在搜索的答案,但目前我将其付诸实践,但它并没有没用。
问题是我有一个页面,你必须在其中输入你的用户编号和你的合同类型,这两个合并是一个关键 table,所以当你点击按钮时,如果用户table 中已经存在它需要显示消息 "The User Already Exists!" 否则它需要将数据发送到另一个页面。
这是我已有的代码:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection("Data Source=;Initial Catalog=Sales;User ID=;Password=");
SqlCommand cmd = new System.Data.SqlClient.SqlCommand("CheckUserDataBase", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parm = new SqlParameter("@User",SqlDbType.VarChar);
parm.Value = "'" + EmployeeNo.Text + "" + ContractType.Text + "'";
parm.Size=25;
parm.Direction = ParameterDirection.Input ;
cmd.Parameters.Add(parm);
SqlParameter parm2 = new SqlParameter("@Exists",SqlDbType.Int);
parm2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm2);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
int IsExists = Convert.ToInt32(cmd.Parameters["@Exists"].Value.ToString());
if (IsExists == 0)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"Scripts","<script>alert('The User already Exists!')</script>");
}
else if (IsExists == 1)
{
Response.Redirect("Data.aspx?NumEmp=" + EmployeeNumber+ "&ContractType=" + ContractType);
}
这是我找到的存储过程:
ALTER PROCEDURE [dbo].[CheckUserDataBase]
(@User AS VARCHAR(25),
@Exists AS INT OUT)
AS
BEGIN
IF EXISTS (SELECT *
FROM GeneralData
WHERE EmployeeeNo+ContractType = @User)
BEGIN
SET @Exists = 1
END
END
我的代码的所有其他部分已经工作,但现在我陷入了 SQL 的验证阶段,非常感谢你的帮助。
此致!
我不清楚你的问题到底出在哪里,但我确实在这段代码中看到了几个问题。也许其中之一可以解决您的问题。
首先,在使用查询参数时,您不需要将参数值用单引号引起来。我还注意到这一行中的一个参数命名错误:
SqlParameter parm= new SqlParameter("@User, cn",SqlDbType.VarChar);
我们可以 select 记录计数并检查它,而不是使用输出参数,以获得更自然的查询并避免在 NULL 的情况下需要将结果转换为整数。
最后,我从存储过程中看到,您合并的两个字段实际上是 table 中的单独列。考虑到这一点,通过实际将两个字段作为单独的参数发送,您还将获得 MUCH 更好的性能。
这是说明这些更改的代码。我不得不猜测如何在两个字段之间划分 25 个字符:
ALTER PROCEDURE [dbo].[CheckUserDataBase]
(
@EmpNo AS VARCHAR(15), @ContractType AS VARCHAR(10)
)
AS
BEGIN
select count(*)
from GeneralData
where EmployeeeNo = @EmpNo
AND ContractType= @ContractType
END
.
protected void Button1_Click(object sender, EventArgs e)
{
int results = 0;
using (var cn = new SqlConnection("Data Source=;Initial Catalog=Sales;User ID=;Password="))
using (var cmd = new SqlCommand("CheckUserDataBase", cn))
{
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@EmpNo", SqlDbType.VarChar, 15).Value = EmployeeNo.Text;
cmd.Parameters.Add("@ContractType", SqlDbType.VarChar, 10).Value = ContractType.Text;
cn.Open();
results = (int)cmd.ExecuteScalar();
}
if (results > 0)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"Scripts","<script>alert('The User already Exists!')</script>");
}
else
{
Response.Redirect(String.Format("Data.aspx?NumEmp={0}&ContractType={1}",
Server.UrlEncode(EmployeeNumber), Server.UrlEncode(ContractType)));
}
}
根据你的暗示,我相信你的挣扎就是验证。在执行另一项任务之前确定所述数据是否存在。您可以通过多种方式做到这一点,但我相信您希望通过的方式是:
ExecuteScalar
SqlDataReader
所以在我的示例中,我将确定用户名是否已经存在。
private readonly string dbConnection = ...;
private const string validateUserQuery = "...;";
public bool ValidateUser(string user)
{
using(var connection = new SqlConnection(dbConnection));
using(var command = new SqlCommand(validateUserQuery, connection))
{
connection.Open();
command.Parameters.Add("@User", SqlDbType.NVarChar, 50).Value = user;
var result = command.ExecuteScalar() as string;
if(!string.IsNullOrEmpty(result))
return true;
}
return false;
}
所以在这种情况下,ExecuteScalar
应该 return 一个 string
作为用户名,如果失败它将使用 null
。所以我们判断它是否存在,它会return为真。否则它 return 是假的。
我是 C# 编程的新手,我一直在所有网站上进行研究,我找到了一个答案,这就是我正在搜索的答案,但目前我将其付诸实践,但它并没有没用。
问题是我有一个页面,你必须在其中输入你的用户编号和你的合同类型,这两个合并是一个关键 table,所以当你点击按钮时,如果用户table 中已经存在它需要显示消息 "The User Already Exists!" 否则它需要将数据发送到另一个页面。
这是我已有的代码:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection("Data Source=;Initial Catalog=Sales;User ID=;Password=");
SqlCommand cmd = new System.Data.SqlClient.SqlCommand("CheckUserDataBase", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parm = new SqlParameter("@User",SqlDbType.VarChar);
parm.Value = "'" + EmployeeNo.Text + "" + ContractType.Text + "'";
parm.Size=25;
parm.Direction = ParameterDirection.Input ;
cmd.Parameters.Add(parm);
SqlParameter parm2 = new SqlParameter("@Exists",SqlDbType.Int);
parm2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm2);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
int IsExists = Convert.ToInt32(cmd.Parameters["@Exists"].Value.ToString());
if (IsExists == 0)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"Scripts","<script>alert('The User already Exists!')</script>");
}
else if (IsExists == 1)
{
Response.Redirect("Data.aspx?NumEmp=" + EmployeeNumber+ "&ContractType=" + ContractType);
}
这是我找到的存储过程:
ALTER PROCEDURE [dbo].[CheckUserDataBase]
(@User AS VARCHAR(25),
@Exists AS INT OUT)
AS
BEGIN
IF EXISTS (SELECT *
FROM GeneralData
WHERE EmployeeeNo+ContractType = @User)
BEGIN
SET @Exists = 1
END
END
我的代码的所有其他部分已经工作,但现在我陷入了 SQL 的验证阶段,非常感谢你的帮助。
此致!
我不清楚你的问题到底出在哪里,但我确实在这段代码中看到了几个问题。也许其中之一可以解决您的问题。
首先,在使用查询参数时,您不需要将参数值用单引号引起来。我还注意到这一行中的一个参数命名错误:
SqlParameter parm= new SqlParameter("@User, cn",SqlDbType.VarChar);
我们可以 select 记录计数并检查它,而不是使用输出参数,以获得更自然的查询并避免在 NULL 的情况下需要将结果转换为整数。
最后,我从存储过程中看到,您合并的两个字段实际上是 table 中的单独列。考虑到这一点,通过实际将两个字段作为单独的参数发送,您还将获得 MUCH 更好的性能。
这是说明这些更改的代码。我不得不猜测如何在两个字段之间划分 25 个字符:
ALTER PROCEDURE [dbo].[CheckUserDataBase]
(
@EmpNo AS VARCHAR(15), @ContractType AS VARCHAR(10)
)
AS
BEGIN
select count(*)
from GeneralData
where EmployeeeNo = @EmpNo
AND ContractType= @ContractType
END
.
protected void Button1_Click(object sender, EventArgs e)
{
int results = 0;
using (var cn = new SqlConnection("Data Source=;Initial Catalog=Sales;User ID=;Password="))
using (var cmd = new SqlCommand("CheckUserDataBase", cn))
{
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@EmpNo", SqlDbType.VarChar, 15).Value = EmployeeNo.Text;
cmd.Parameters.Add("@ContractType", SqlDbType.VarChar, 10).Value = ContractType.Text;
cn.Open();
results = (int)cmd.ExecuteScalar();
}
if (results > 0)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"Scripts","<script>alert('The User already Exists!')</script>");
}
else
{
Response.Redirect(String.Format("Data.aspx?NumEmp={0}&ContractType={1}",
Server.UrlEncode(EmployeeNumber), Server.UrlEncode(ContractType)));
}
}
根据你的暗示,我相信你的挣扎就是验证。在执行另一项任务之前确定所述数据是否存在。您可以通过多种方式做到这一点,但我相信您希望通过的方式是:
ExecuteScalar
SqlDataReader
所以在我的示例中,我将确定用户名是否已经存在。
private readonly string dbConnection = ...;
private const string validateUserQuery = "...;";
public bool ValidateUser(string user)
{
using(var connection = new SqlConnection(dbConnection));
using(var command = new SqlCommand(validateUserQuery, connection))
{
connection.Open();
command.Parameters.Add("@User", SqlDbType.NVarChar, 50).Value = user;
var result = command.ExecuteScalar() as string;
if(!string.IsNullOrEmpty(result))
return true;
}
return false;
}
所以在这种情况下,ExecuteScalar
应该 return 一个 string
作为用户名,如果失败它将使用 null
。所以我们判断它是否存在,它会return为真。否则它 return 是假的。