问题是我的代码没有使用asp.net c#将新记录插入/保存到我的SQL Server数据库中,并且没有给我任何错误。
这是我的代码:
public partial class AddNews_AddNews : System.Web.UI.Page
{
protected SqlConnection _connection;
protected SqlCommand _command;
protected SqlDataAdapter _adp;
protected System.Data.DataTable _tbl;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click1(object sender, EventArgs e)
{
prepareConnection();
_command.CommandText = "INSERT INTO" + drbdlSection.SelectedItem + "(Title,Contect) VALUES (" + titleTextBox.Text + "," + CKEditor1.Text + ");";
}
protected void prepareConnection()
{
_connection = new SqlConnection(@"Data Source=localhost;Initial Catalog=BrainStorms;User ID=sa;Password=xxx");
_connection.Open();
_command = new SqlCommand();
_command.Connection = _connection;
}
}
答案 0 :(得分:5)
您需要将_command.ExecuteNonQuery();
添加到Button1_Click1()方法的末尾。您已经设置了要运行的查询,但实际上从未运行它。
答案 1 :(得分:4)
应该执行命令。您的代码缺少对ExecuteNonQuery的调用
protected void Button1_Click1(object sender, EventArgs e)
{
....
command.ExecuteNonQuery();
}
说,我真的建议删除使你的命令文本的字符串连接 您的代码对Sql Injection开放并解析问题
所以我会用这种方式重写你的代码
protected void Button1_Click1(object sender, EventArgs e)
{
string commandText = "INSERT INTO " + drbdlSection.SelectedItem.ToString() +
"(Title,Contect) VALUES (@title, @edit)"
using(SqlConnection con = prepareConnection())
using(SqlCommand command = new SqlCommand(commandText, con))
{
command.Parameters.AddWithValue("@title", titleTextBox.Text);
command.Parameters.AddWithValue("@edit", CKEditor1.Text);
command.ExecuteNonQuery();
}
}
protected SqlConnection prepareConnection()
{
SqlConnection con = new SqlConnection(......);
con.Open();
return con;
}
在这次重写中,我更改了prepareConnection
方法以返回SqlConnection的实例,并删除了创建命令的代码。
这将允许删除用于连接和命令的全局变量。
然后,在按钮事件中,我在连接周围添加了using statement以及在异常情况下有助于关闭和销毁这些实例的命令。
最后,参数将添加到命令参数集合中,让任务将您的值传递给比您和我更了解如何正确执行此操作的框架。
表名称的串联仍然存在问题,但我希望您对此输入有完全控制权,之前已准备好下拉列表的内容。
答案 2 :(得分:2)
你没有执行命令,你没有打开Connection,你的代码对SqlInjection使用参数是开放的!
public partial class AddNews_AddNews : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click1(object sender, EventArgs e)
{
using(var connection = this.GetConnection())
{
using(var cmd = new SqlCommand())
{
cmd.CommandText = "INSERT INTO " + drbdlSection.SelectedItem + "(Title, Contect) VALUES (@param1, @param2)";
cmd.Parameters.AddWithValue("@param1", titleTextBox.Text);
cmd.Parameters.AddWithValue("@param2", CKEditor1.Text);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
}
}
}
protected SqlConnection GetConnection()
{
var connection = new SqlConnection(@"Data Source=localhost;Initial Catalog=BrainStorms;User ID=sa;Password=xxx");
return connection;
}
}
答案 3 :(得分:1)
Insert语句,你的字符串周围没有单引号(除非你实际上在文本框中输入单引号)...不确定是否会导致问题;我不记得 - 但值得一试。
既然您正在使用ADO.NET,我认为您在设置我正在考虑的ComamndText之后必须执行_command对象...