在asp.net中写入数据库

时间:2013-02-23 17:21:57

标签: c# asp.net

我正在为一个班级完成一个asp.net项目,并开始注意到一个必要条件之一的重大缺陷。应用程序应该提出五个问题并将答案写入数据库,然后它应该向用户显示调查结果。

这是我到目前为止所尝试的:

 public static string GetConnectionString()
    {
        string connStr = String.Format("server={0}; user id={1}; password={2};" + "database= -table to be accessed-; pooling=false", 
            "-database server-", "-user-", "-password-");
        return connStr;
    } 

 protected void Button1_Click(object sender, EventArgs e)
    {

        if (Page.IsValid)
        {
            string sex = gender.Text;
            string likes = interests.Text;
            string edu = education.Text;
            string nation = nationality.Text;
            string userage = age.Text;

            MySql.Data.MySqlClient.MySqlConnection mycon;

            mycon = new MySqlConnection(GetConnectionString());

            try
            {
                MySqlCommand cmd = new MySqlCommand("INSERT INTO survey (gender, age, birthplace, occupation, winner) VALUES ('" + sex  + ", " + likes + ", " + edu + ", " + userage + "')", mycon);
                cmd.ExecuteNonQuery();
                mycon.Open();
            }

            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            finally
            {
                mycon.Close();
            }

        }
    }

我继续用占位符替换了数据库信息。

数据库是MySql并托管在外部服务器上。

我遇到的问题是代码编译,但是信息不会写入数据库。我不确定这是否是因为我仍然在测试代码并且没有将Web应用程序上传到服务器或事实上它是错误的。

就显示结果而言,如果上面的代码是正确的,那只是改变sql查询的问题,对吗?

提前感谢您的见解。

5 个答案:

答案 0 :(得分:5)

在打开数据库连接之前执行命令。

ExecuteNonQuery()方法和所有其他Execute方法都需要打开数据库连接。

另一个错误是:
列数(即5)和提供的值(即4)不相等。

one more issue in your code is here所述的Steve Wellens

更改您的代码如下:

try
{
    MySqlCommand cmd = new MySqlCommand("INSERT INTO survey (gender, age, birthplace, occupation, winner) VALUES ('" + sex  + ", " + likes + ", " + edu + ", " + userage + "')", mycon);
    mycon.Open();
    cmd.ExecuteNonQuery();
}    
catch (Exception ex)
{
    Response.Write(ex.Message);
}    
finally
{
    mycon.Close();
}

安全说明:

切勿使用data运算符将+添加到查询中。它可能会导致SQL Injection

如果用户在1); DROP TABLE <table-name> -- Age中输入TextBox,该怎么办? 任何人都可以完全从数据库中删除任何表。

使用MySQL Parameter来避免此类问题。它可以防止对整个数据库造成严重损害。

答案 1 :(得分:1)

在你的连接字符串中:

"database= -table to be accessed-;

......你不要放桌子。该表在SQL语句中指定。

答案 2 :(得分:1)

首先打开连接,然后执行查询。

    try
                {
                    MySqlCommand cmd = new MySqlCommand("INSERT INTO survey (gender, age, birthplace, occupation, winner) VALUES ('" + sex  + ", " + likes + ", " + edu + ", " + userage + "')", mycon);
                    mycon.Open();
                    cmd.ExecuteNonQuery(); 
                }

答案 3 :(得分:1)

这可能不是唯一的问题,但它是 问题:

"INSERT INTO survey (gender, age, birthplace, occupation, winner) " + 
"VALUES ('" + sex  + ", " + likes + ", " + edu + ", " + userage + "')", 

(我把它分成两个字符串,以便于阅读。)

您要插入五列。您只指定了四个数据值,除性别外,它们看起来不是正确的顺序,甚至不是正确的数据。

答案 4 :(得分:0)

尝试检查这些事情:

  1. 尝试在执行SQL

  2. 之前打开连接
  3. 检查您的SQL,并尝试直接对数据库执行它们。我在你的SQL中看到的是你将值连接成一个字符串(引号只存在于开头和结尾,但不存在于传递的参数之间)