2013-04-23 38 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

相關問題