C# 如何使用c代码检查sql表中是否存在特定项?
我想检查一个CNIC no.tat用户输入的是否在我的表中不存在,然后我不希望他继续注册过程 这是代码,其中一部分不起作用。。我错在哪里C# 如何使用c代码检查sql表中是否存在特定项?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我想检查一个CNIC no.tat用户输入的是否在我的表中不存在,然后我不希望他继续注册过程 这是代码,其中一部分不起作用。。我错在哪里 con.Open(); string cmdStr = "Select count(*) from Registration where UserName='" + TextBoxUN.Text + "'"; string cmdCnic = "Select count(*) from List_CNIC where CNIC=
con.Open();
string cmdStr = "Select count(*) from Registration where UserName='" + TextBoxUN.Text + "'";
string cmdCnic = "Select count(*) from List_CNIC where CNIC='" + TextBoxCNIC.Text + "'";
SqlCommand userExist=new SqlCommand(cmdStr, con);
SqlCommand cnicExist=new SqlCommand(cmdCnic,con);
int temp=Convert.ToInt32(userExist.ExecuteScalar().ToString());
int tempCnic = Convert.ToInt32(cnicExist.ExecuteScalar().ToString());
con.Close();
if (temp==1)
{
Session["name1"] = TextBoxFN.Text;
Session["UserName"] = TextBoxUN.Text;
Response.Redirect("Error.aspx");
}
if (!(tempCnic==1))
{
Session["nameFull"] = TextBoxFN.Text;
Session["CNIC"] = TextBoxCNIC.Text;
Response.Redirect("Error_InvalidCNIC.aspx");
}
我检查用户名是否存在的代码部分工作正常,但检查tempCnic。即使用户未输入任何内容,它也会自动重定向到页面错误_InvalidCNIC.aspx
代码有什么问题?我喜欢实体框架,所以这可能不是你的答案,但。。。。你可能会感兴趣
var stuff = List_CNIC.Where(p => p.CNIC == TextBoxCNIC.Text);
if(stuff.Count() == 1) {
//do your stuff
}
我将创建一个存储过程,根据插入成功返回不同的代码,并从您的C代码中执行它
CREATE PROC RegisterUser
@UserName nvarchar(255),
@CNIC nvarchar(255)
AS
BEGIN
IF EXISTS (SELECT * FROM Registration WHERE UserName = @UserName)
BEGIN
RETURN -1
END
ELSE
BEGIN
IF EXISTS (SELECT * FROM List_CNIC WHERE CNIC = @CNIC)
BEGIN
RETURN -2
END
ELSE
BEGIN
--Insert into relevant tables, ideally wrapped in a TRANSACTION with try/catch
RETURN 1
END
END
END
然后,我将此存储过程拖到LINQ to SQL datacontext上,并按如下方式执行:
var db = new DataContextDataClasses();
var result = db.RegisterUser(userName,CNIC);
switch (result) {
case 1:
//success
break;
case -1:
//user exists
break;
case -2:
//CNIC exists
break
default:
throw new Exception("Unknown error occurred");
}
但是你也可以通过ADO.NET调用它…我看不出有什么问题。如果用户没有输入任何内容,则 从列表中选择count*,其中CNIC=应设置tempCnic=0 除非有一行CNIC是空字符串 正如你所说,这一块被触发了
if (!(tempCnic==1))
{
Session["nameFull"] = TextBoxFN.Text;
Session["CNIC"] = TextBoxCNIC.Text;
Response.Redirect("Error_InvalidCNIC.aspx");
}
因为!0==1表示为真
它正在做你要求它做的事情
顺便说一句:如果你把这张支票写成tempCnic的话,它会更容易阅读=1顺便说一句:该代码中存在SQL注入漏洞。这个网站很容易被黑客入侵。你是否尝试过在SSMS中运行查询Select count*from List_CNIC where CNIC=以查看它是否返回你认为会返回的值?或者通过调试器运行代码并检查TEMPCNICT的返回值OP没有询问如何在EF的LINQ中重写查询。为什么要使用count而不是if存在?可能存在,因为计数必须执行完整扫描,而存在将在第一次匹配后返回。可能不是用户名的问题,因为如果用户名是唯一的,或者PK将是一个非常有效的扫描,但是我们不知道另一个表是什么样子。既然存在不可能更糟,那就是我一直使用的。是的,有道理。我知道在这种情况下,EXISTS会更好。。。已更新以显示此信息,但看起来不会使用此解决方案。您不知道。OP还没有决定使用哪种解决方案(如果有的话)。你的输入即使对OP没有帮助,也可能在今天和将来对其他读者有所帮助。所以不要觉得你的信息是浪费。一旦你切换到EXISTS,我就把它升级了-@AaronBertrand我只是想知道,当用户甚至没有在CNIC文本框中输入任何内容时,它会自动重定向到页面错误_InvalidCNIC.aspx。。这就是我要找的。。。CNIC是一个13位数字,已保存为varchar50类型。请看。。。点击链接点击这里注册,注册表格应该是打开的,在这个表格中,用户将输入用户名和cnic,当我只执行用户名检查时,如果它已经存在于注册选民数据库中,请将他重定向到错误页面。。。我扩展了代码,但这一次我想,如果用户输入的CNIC尚未存储在数据库中,那么他就没有资格注册到这个特定站点,这就是为什么当checkd userName使用iftemp==1时,CNIC使用iftempnic=1,考克斯他们是2相反的情况问题是点击这里注册。。注册表根本没有打开,它正在将我的页面重定向到Error_InvalidCNIC.aspx..您需要包含与您的问题相关的所有代码,并更具体地说明您在寻找什么。我的回应是,即使用户没有输入任何内容,它也会自动重定向到页面错误\u InvalidCNIC.aspx。我只是想知道它是否会自动重定向到页面错误\u InvalidCNIC.aspx。。这就是我要找的。。。CNIC是一个13位数字,已保存为varchar50类型。