【发布时间】:2016-07-20 07:20:11
【问题描述】:
当我用参数替换串联插入时,INSERT 停止保存到数据库。
我用:
Int32 rowsAffected = cmd.ExecuteNonQuery();
var totalRecords = (new SqlCommand("SELECT COUNT(*) FROM dbo.EmpInfo", cmd.Connection)).ExecuteNonQuery();
MessageBox.Show("RowsAffected: " + rowsAffected.ToString());
MessageBox.Show("Total Records: " + totalRecords);
但是,RowsAffected 的返回值为 1,totalRecords 的返回值为 -1。
if (Status == RegistrationStatus.r_OK)
{
String query = "INSERT INTO dbo.EmpInfo(EmpYear, EmpStatus, LName, FName, JobTitle, EmpPay, EmpDoB, EmpSex, EmpAddr, EmpCity, EmpState, EmpZIP, EmpCountry, EmpEAddr, EmpTelNo, EmpMobileNo, EmpDate) VALUES (@EmpYear, @EmpStatus, @LName, @FName, @JobTitle, @EmpPay, @EmpDoB, @EmpSex, @EmpAddr, @EmpCity, @EmpState, @EmpZIP, @EmpCountry, @EmpEAddr, @EmpTelNo, @EmpMobileNo, getdate())";
using (SqlConnection conn = new SqlConnection("Data Source=RB-DESKTOP;Initial Catalog=TimeDB;Persist Security Info=True;User ID=sa;Password=bautista7"))
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
using (SqlCommand cmd = new SqlCommand(query, conn))
{
using (SqlTransaction transaction = conn.BeginTransaction())
{
cmd.Connection = conn;
cmd.Transaction = transaction;
ParameterName = "@EmpYear", Value = EmpYear });
cmd.Parameters.AddWithValue("@EmpYear", EmpYear);
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpStatus", Value = "Active" });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@LName", Value = regLname_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@FName", Value = regFname_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@JobTitle", Value = "NULL" });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpPay", Value = PayType_cb.SelectedItem.ToString()});
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpDoB", Value = regDob_dtp.Value.Date });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpSex", Value = gender });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpAddr", Value = regAddr_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpCity", Value = regCity_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpState", Value = regState_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpZIP", Value = regZip_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpCountry", Value = regCountry_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpEAddr", Value = regEmail_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpTelNo", Value = regTel_text.Text });
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@EmpMobileNo", Value = regMob_text.Text});
cmd.ExecuteNonQuery();
transaction.Commit();
【问题讨论】:
-
您应该在帖子中隐藏您的密码
-
in
Int32 rowsAffected = cmd.ExecuteNonQuery();你到底在这里执行什么? -
使用 ExecuteScalar()
(new SqlCommand("SELECT COUNT(*) FROM dbo.EmpInfo", cmd.Connection)).ExecuteScalar() -
您添加的参数很长。你可以简单地做
cmd.Parameters.Add("@paramname, Sqldbtype, characterlimit).Value = Textbox.Text -
如果这是唯一的声明,则不需要交易
标签: c# sql sql-server winforms