insertBankMas = "";
insertBankMas = "INSERT INTO IntNotes (Room,Size) VALUES('" + txtRoom.Text + "','" + txtSize.Text + "')";
PbdataAdapter = new OleDbDataAdapter(insertBankMas, PbSQLConnection);
openconnection();
insertcommand.ExecuteNonQuery();
MessageBox.Show("Room is Added");
请纠正我......
答案 0 :(得分:2)
SIZE
是Microsoft OleDb提供商的reserved keyword。您需要使用方括号(如[SIZE]
)。最佳做法是将其更改为非 - 保留字。由于您的sql是INSERT
查询,因此您不需要OleDbDataAdapter
。从数据库中获取数据时将使用此结构。只需使用ExecuteNonQuery
执行插入查询。
您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
还可以使用using
statement自动处理您的OleDbConnection
和OleDbCommand
,而不是手动调用Close
或Dispose
方法。
using(var connection = new OleDbConnection(conString))
using(var cmd = connection.CreateCommand())
{
cmd.CommandText = "INSERT INTO IntNotes (Room, [Size]) VALUES(?, ?)";
cmd.Parameters.Add("?", OleDbType.VarWChar).Value = txtRoom.Text;
cmd.Parameters.Add("?", OleDbType.VarWChar).Value = txtSize.Text;
// I assume your column types mapped with VarWChar
connection.Open();
int effectedRows = cmd.ExecuteNonQuery();
if(effectedRows > 0)
{
MessageBox.Show("Room is Added");
}
}
顺便说一下,我强烈怀疑你的Size
列应该(?)是基于它名称的一些数值。您可能希望改变它的列类型。
答案 1 :(得分:0)
可能发生错误,因为您在文本框中输入的数据包含需要转义的特殊字符。即使数据不需要转义,也不能使用字符串连接来构建sql命令,因为这会导致sql注入攻击。相反,您应该使用参数化语句并将用户数据作为参数传递。
有关详细信息,请参阅此文章: SQL Injection Attacks and Some Tips on How to Prevent Them
答案 2 :(得分:0)
我的真诚感谢大家,提醒我SIZE是一个关键词。它的工作,当我将SIZE字段名称更改为ROOMSIZE
时由于 拉姆