C#插入查询 - 从ExecuteNonQuery没有返回值

问题描述:

你能帮我解决这个问题吗?我的代码似乎很好,但从ExecuteNonQuery没有返回值。见下面我的代码:C#插入查询 - 从ExecuteNonQuery没有返回值

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    OleDbConnection conn; 
    conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbsCOLLABERA.accdb;Persist Security Info=False;"); 

    string sqlAdd = "insert into tblEmployeeList(empID,empLName,empFName,empMName,empGender,empBDate,empAddress,empEAddress,empPNumber,empPosition,empStatus,empHRate,empOTRate,empTimeIn,empTimeOut) values ('" 
    + txtID.Text + "','" + txtLName.Text + "','" + txtFName.Text + "','" + txtMName.Text + "','" + txtGender.SelectedValue + "','" + txtBDate.Text + "','" + txtAddress.Text + "','" + txtEAddress.Text + "','" + txtPNumber.Text + "','" + txtPosition.Text + "','" 
    + txtStatus.SelectedValue + "'," + txtHRate.Text + "," + txtOTRate.Text + ",'" + txtTimeIn.SelectedValue + "','" + txtTimeOut.SelectedValue + "')"; 

    OleDbCommand cmdAdd = new OleDbCommand(sqlAdd, conn); 

    conn.Open(); 
    cmdAdd.ExecuteNonQuery(); 
    //oledbcommand.ExecuteNonQuery(); 
    conn.Close(); 
    MessageBox.Show(sqlAdd); 
} 
+6

你期待什么作为回报价值? INSERT语句不返回任何内容。 :) – user743414 2014-10-09 14:48:59

+13

你的代码对SQL注入攻击是开放的,你真的应该使用参数化查询。 – 2014-10-09 14:49:46

+0

你需要澄清你期望被退回的东西......以及问题是什么,因为你是对的,你的代码看起来很好,因为它... – DotN3TDev 2014-10-09 14:50:01

它应该返回受影响的行数,在这种情况下1.尝试分配结果:

int rowsAffected = cmdAdd.ExecuteNonQuery(); 

使用此代码:

string sqlAdd = "insert into tblEmployeeList(empID,empLName,empFName,empMName,empGender,empBDate,empAddress,empEAddress,empPNumber,empPosition,empStatus,empHRate,empOTRate,empTimeIn,empTimeOut) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

cmdAdd.Parameters.AddWithValue("?", txtID.Text); 
cmdAdd.Parameters.AddWithValue("?", txtLName.Text); 
cmdAdd.Parameters.AddWithValue("?", txtFName.Text); 
cmdAdd.Parameters.AddWithValue("?", txtMName.Text); 
cmdAdd.Parameters.AddWithValue("?", txtGender.SelectedValue); 
cmdAdd.Parameters.AddWithValue("?", txtBDate.Text); 
cmdAdd.Parameters.AddWithValue("?", txtAddress.Text); 
cmdAdd.Parameters.AddWithValue("?", txtEAddress.Text); 
cmdAdd.Parameters.AddWithValue("?", txtPNumber.Text); 
cmdAdd.Parameters.AddWithValue("?", txtPosition.Text); 
cmdAdd.Parameters.AddWithValue("?", txtStatus.SelectedValue); 
cmdAdd.Parameters.AddWithValue("?", txtHRate.Text); 
cmdAdd.Parameters.AddWithValue("?", txtOTRate.Text); 
cmdAdd.Parameters.AddWithValue("?", txtTimeIn.SelectedValue); 
cmdAdd.Parameters.AddWithValue("?", txtTimeOut.SelectedValue); 

这可以修复您的SQL注入漏洞,使用参数传递参数,不需要自己构建SQL。而ODBC使用?作为参数,因为它不支持参数。

+0

它不显示任何错误位它不会向表中插入任何值 – CaptainBadass 2014-10-09 14:52:58

+0

如果运行此操作,'rowsAffected'的值是什么?你确定没有例外吗?试着在它周围设置一个“try ... catch”。 – 2014-10-09 14:53:50

+0

什么也没有显示和nothings发生。它工作正常,但没有将数据插入表格。 – CaptainBadass 2014-10-09 14:55:41