我正在为一个班级完成一个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查询的问题,对吗?
提前感谢您的见解。
答案 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)
尝试检查这些事情:
尝试在执行SQL
检查您的SQL,并尝试直接对数据库执行它们。我在你的SQL中看到的是你将值连接成一个字符串(引号只存在于开头和结尾,但不存在于传递的参数之间)