2013-04-23 53 views
1

我知道这个话题已经讨论了很多时间,但我仍然不明白我的问题解决了..C#Windows窗体应用程序使用Access女士无法插入数据

好吧,我有一个表格插入登记数据为MS Access数据库(2007年),但我的代码犯规插入数据到数据库中,并没有错误, 这里是代码:

OleDbConnection cn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Data/db_klinik.mdb"); 
OleDbCommand cmd = new OleDbCommand(); 
OleDbDataAdapter adapter = new OleDbDataAdapter(); 


private void btnSave_Click(object sender, EventArgs e) 
     { 

string idCard = this.txtID.Text; 
string name = this.txtName.Text; 
DateTime dateBirth = this.dateEdit1.DateTime; 

cn.Open(); 
cmd.CommandText = "Insert into tb_reg (id, name, dateBirth, blood_type) Values(@id,@name,@dateBirth)"; 

        cmd.Parameters.AddWithValue("@id", idCard); 
        cmd.Parameters.AddWithValue("@name", name);      
        cmd.Parameters.AddWithValue("@dateBirth", dateBirth.ToString()); 

adapter.InsertCommand = cmd; 
        int result = cmd.ExecuteNonQuery(); 

        if (result > 0) 
         MessageBox.Show("Succesfully added"); 
        else 
         MessageBox.Show("try again"); 
        cn.Close(); 
     } 

消息框总是显示“添加成功”。

回答

0

我在我的一个项目中有类似的东西。也许它适用于你:

string insertString = string.Format(CultureInfo.InvariantCulture, "INSERT INTO tb_reg VALUES ('{0}', '{1}', '{2}', {3})", idCard, name, dateBirth, blood_type); 
OleDbCommand cmd = new OleDbCommand(insertString, new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Data/db_klinik.mdb")); 
cmd.Connection.Open(); 

int numberAdded = cmd.ExecuteNonQuery(); 

if (numberAdded < 1) 
{ 
    //do something, the data was not added 
} 
else 
{ 
    //be happy :) 
} 
cmd.Connection.Close(); 

正如我所说,这对我工作。

+0

hi bema,thx很多它的工作,我不知道为什么,但它的工作lol – Barzul 2013-04-23 14:06:58

+0

@Barzul我很高兴你得到它的工作 - 但请重新考虑使用字符串连接或格式化来创建您的SQL语句。它打开完成[SQL注入攻击](http://msdn.microsoft.com/en-us/library/ms161953(v=sql.105).aspx),最多可以暴露敏感数据,最坏的情况下会破坏你的数据库。 – 2013-04-23 14:11:31

0

OleDB提供程序不支持命名参数。改变你的SQL来

cmd.CommandText = @"Insert into tb_reg (id, name, dateBirth, blood_type) 
        Values(?,?,?,?)"; 

在创建他们可以命名的参数,但它会把它们分配给?占位符,它们将被添加到命令的顺序。

另请注意,您缺少blood_type的参数。

无论你做什么,都不要改为使用字符串连接。它打开了SQL Injection攻击的大门。

+0

thx斯坦利,我会试试这个 – Barzul 2013-04-23 14:15:15

相关问题