我的问题是我想检查注册页面中的用户名是否已经存在于数据库中以防止多个相同的名称但是出现错误
An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code Additional information: Incorrect syntax near '*'.
这是我的代码:
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();
}
拜托,有人可以帮助我吗?
答案 0 :(得分:1)
尝试替换
string sprawdz = "Wybierz count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";
带
string sprawdz = "select count (*) from Uzytkownicy where Nazwa_uzytkownika='"+un.Text+"'";
我不是波兰语的发言人,但在Google上检查过Wybierz是一个波兰语,意思是选择(Link)
所以在逻辑上和句法上应该选择不是Wybierz
答案 1 :(得分:0)
在这种情况下,我建议使用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
希望所以我对此做得很好。