检查用户是否存在于ASP.NET的数据库中
本文关键字:NET 数据库 ASP 用户 是否 存在 检查 | 更新日期: 2023-09-27 18:05:26
我的问题是我想检查注册页面中的用户名是否已经存在于数据库中,以防止多个相同的名称,但得到一个错误
类型为"System.Data.SqlClient"的异常。在System.Data.dll中发生了SqlException',但未在用户代码中处理附加信息:"*"附近的语法不正确。下面是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack) //tworzymy Zapytanie wraz z połączeniem z bazą
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString);
conn.Open();
string sprawdz = "Wybierz count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";
SqlCommand com = new SqlCommand(sprawdz, conn);
int temp = Convert.ToInt32((String)com.ExecuteScalar().ToString()); <----The error moment
if(temp==1)
{
Response.Write("Uzytkownik o podanej nazwie już istnieje.");
}
conn.Close();
}
请问,有人能帮我吗?
尝试替换
string sprawdz = "Wybierz count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";
string sprawdz = "select count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";
我不会波兰语,但在谷歌上查到了Wybierz是一个波兰语单词,意思是选择(链接)
所以逻辑上和语法上都应该选择而不是Wybierz
在这种情况下,我建议使用SQL对存储过程执行此操作。
为什么?存储过程只编译一次,并以可执行的形式存储,因此过程调用快速高效。可执行代码被自动缓存,并在用户之间共享。降低了内存需求和调用开销。
所以像这样的代码:SqlCommand cmd = new SqlCommand("CheckIfUserExists",conn);
cmd.CommandType=CommandType.StoreProcedure;
cmd.Parameters.AddWithValue("@UserName",un.Text);
cmd.Parameters.AddWithValue("@IsExists",0);
int rowAffected=cmd.ExecuteNonQuery();
// rowAffected contains your Result
程序如下:
CREATE PROCEDURE CheckIfUserExists
(
@UserName Varchar(50),
@IsExists INT OUTPUT
)
AS
If exists (select Nazwa_uzytkownika from Uzytkownicy where Nazwa_uzytkownika = @username)
Begin
Set @IsExists = 1
End
Else
begin
Set @IsExists = 0
End
Return @IsExists