我有manullay创建的文本框,然后用它来创建一个新用户。我正在使用SQL SERVER 2005用于后端和Visual Server 2008用于前端..
我有这个LoginAccount表,它存储了创建的新用户的详细信息。当我单击按钮(我已编写代码以通过SQL插入创建新用户)时,
string strConnection = ConfigurationManager.ConnectionStrings"FHDLConnectionString"].ToString();
SqlConnection sqlConnection = new SqlConnection(strConnection);
string username = TextBox1.Text;
string password = TextBox2.Text;
string confirmpass = TextBox3.Text;
string SQLQuery = "Select username From LoginAccount where '" + username + "'";
string SQLQuery1 = "Insert into LoginAccount values ('" + username + "','" + password + "')";
SqlCommand command = new SqlCommand(SQLQuery, sqlConnection);
SqlCommand command1 = new SqlCommand(SQLQuery1, sqlConnection);
sqlConnection.Open();
string CheckUsername = "";
if (password.ToString() != confirmpass.ToString())
{
Literal1.Text = " Password's does not match ";
}
else
{
try
{
CheckUsername = command.ExecuteScalar().ToString();
}
catch (Exception er)
{
Literal1.Text = " Username already exists ";
}
string insertQuery = "";
try
{
insertQuery = command1.ExecuteScalar().ToString();
Server.Transfer("Login_Created.aspx");
}
catch (Exception er)
{
Literal1.Text = " Could not create the user, Please retry with some other option ";
}
}
sqlConnection.Close();
我收到这些例外的
在预期条件的上下文中指定的非布尔类型的表达式,在'fhdl'附近 我在第一次捕获时遇到此错误
和
对象引用未设置为对象的实例。 这是最后一次捕获。
但主要的是我能够将用户名和密码插入LoginAccount表!!!!!!! 即当我看到表内容时,我可以看到创建的新用户那张桌子。 另一件事是这段代码在之前完成了一次但不是现在:( 请问有谁能告诉我哪里出错了? 我是SQl的C#新手......
答案 0 :(得分:1)
三件事:
您的第一个查询没有达到您想要的效果。它解析为:
Select username From LoginAccount where 'username'
您想要检查数据库的用户名。
此代码让您对SQL注入攻击持开放态度。有关如何在C#中阻止它们,请参阅this article。
答案 1 :(得分:1)
1 - ExecuteScalar()表示有返回值。插入没有返回值。请改用ExecuteNonQuery。
2 - 另外,对于insert语句,请指定要插入的字段。它没有指定字段,它试图插入表的前两列,可能不是用户名和密码。
插入LoginAccount(UserName,Password)值....
3 - 你的选择陈述不正确。
从LoginAccount中选择UserName ='...您缺少字段名称。