通过C#将值插入SQL表时出现异常

时间:2010-07-23 06:14:50

标签: c# sql visual-studio-2008

我有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#新手......

2 个答案:

答案 0 :(得分:1)

三件事:

  1. 您的第一个查询没有达到您想要的效果。它解析为:

    Select username From LoginAccount where 'username'

    您想要检查数据库的用户名。

  2. 此代码让您对SQL注入攻击持开放态度。有关如何在C#中阻止它们,请参阅this article

  3. 在类似的说明中,您实际上不希望在数据库中以明文形式存储密码。

答案 1 :(得分:1)

1 - ExecuteScalar()表示有返回值。插入没有返回值。请改用ExecuteNonQuery。

2 - 另外,对于insert语句,请指定要插入的字段。它没有指定字段,它试图插入表的前两列,可能不是用户名和密码。

插入LoginAccount(UserName,Password)值....

3 - 你的选择陈述不正确。

从LoginAccount中选择UserName ='...您缺少字段名称。