ExecuteNonQuery()返回为1,但是insert后数据库表未更新

鱼叔叔 2014-08-07 11:10:51
急求!!如题下面是源码,请各位大神解惑
protected void Button3_Click(object sender, EventArgs e) //按“更新”按钮事件
{



string connString = "Data Source=GY-PC;Initial Catalog=Database1;Integrated Security=True";
SqlConnection conn = new SqlConnection(connString);

conn.Open();
string sqlStr = "create table ";
sqlStr += "TempExcel" + "( ";
sqlStr += "barcode numeric(18) primary key,";
sqlStr += "unitPrice numeric(18,3),";
sqlStr += "storeNumber numeric(18),";
sqlStr += "productName nchar(100)";
sqlStr += ")";
SqlCommand cmd = new SqlCommand(sqlStr, conn); //命令
cmd.ExecuteNonQuery(); //执行建临时表命令
conn.Close();

int t = 0;
SqlConnection conn2 = new SqlConnection(connString);
conn2.Open();
SqlTransaction trans = conn2.BeginTransaction();//事物对象
try
{
SqlCommand com = new SqlCommand();//数据操作对象
com.Connection = conn2;//指定连接

com.Transaction = trans;//指定事物
string sql = "";
for (int ii = 1; ii < ds.Tables[0].Rows.Count; ii++)
{ //对datatable循环


sql = " INSERT TempExcel ( barcode , unitPrice , storeNumber , productName ) VALUES ( '" + dr[ii]["条 码"].ToString() + "','" + dr[ii]["销售单价"].ToString() + "','" + dr[ii]["库存数量"].ToString() + "','" + dr[ii]["品 名"].ToString() + "')";
//某一行的数据
com.CommandText = sql;
t = com.ExecuteNonQuery();

}
trans.Commit();//如果全部执行完毕.提交

}
catch
{
trans.Rollback();//如果有异常.回滚.
conn2.Close();
}
finally
{
conn2.Close();//关闭连接
}
...全文
458 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2014-08-08
  • 打赏
  • 举报
回复
VALUES ( '" + dr[ii]["条 码"].ToString() + "' 两头的单引号去掉 VALUES ( " + dr[ii]["条 码"].ToString()
鱼叔叔 2014-08-08
  • 打赏
  • 举报
回复
谢谢大家,问题解决了,发现原来是更新的字符类型不匹配 sqlStr += "barcode numeric(18) primary key,";与 sql = " INSERT TempExcel ( barcode , unitPrice , storeNumber , productName ) VALUES ( '" + dr[ii]["条 码"].ToString() ,请问能有方法把插入的这些转成数字类型么 dr[ii]["条 码"].ToString() + "','" + dr[ii]["销售单价"].ToString() + "','" + dr[ii]["库存数量"].ToString() ?
宝_爸 2014-08-08
  • 打赏
  • 举报
回复
是不是进入catch了,如果是,在里面打印下异常信息。
鱼叔叔 2014-08-08
  • 打赏
  • 举报
回复
谢谢大家的帮助,结帖吧
  • 打赏
  • 举报
回复
事务本身的含义就是执行完所有的语句之后提交,如果有一条失败则回滚,打个比方你要循环10次,这才循环了一次,事务肯定是没有提交的
  • 打赏
  • 举报
回复
for (int ii = 1; ii < ds.Tables[0].Rows.Count; ii++) { //对datatable循环 sql = " INSERT TempExcel ( barcode , unitPrice , storeNumber , productName ) VALUES ( '" + dr[ii]["条 码"].ToString() + "','" + dr[ii]["销售单价"].ToString() + "','" + dr[ii]["库存数量"].ToString() + "','" + dr[ii]["品 名"].ToString() + "')"; //某一行的数据 com.CommandText = sql; t = com.ExecuteNonQuery(); } 你这写了一个对datatable循环,你确定只有一条循环就结束了?如果没结束的话显然事务是没有提交的,没有提交就没有任何记录
myhope88 2014-08-08
  • 打赏
  • 举报
回复
先一步步跟踪一下,不要一下子执行这么多代码
sunny906 2014-08-08
  • 打赏
  • 举报
回复
说明事务没有提交成功,在事务环境下,ExecuteNonQuery()返回为1并不代表数据就添加进数据表了,也就是说ExecuteNonQuery()返回1并且trans.Commit();成功,数据才会写进数据表
yzf86211861 2014-08-08
  • 打赏
  • 举报
回复
只能说 细心 好好学学调试
M依然 2014-08-08
  • 打赏
  • 举报
回复
应该是循环插入数据的时候出现的问题。你应该 在循环里面判断下 t是否为0 如果是的话就事务回滚
鱼叔叔 2014-08-08
  • 打赏
  • 举报
回复
引用 9 楼 apollokk 的回复:
VALUES ( '" + dr[ii]["条 码"].ToString() + "' 两头的单引号去掉 VALUES ( " + dr[ii]["条 码"].ToString()
去掉单引号后就导入不了数据库了
鱼叔叔 2014-08-08
  • 打赏
  • 举报
回复
引用 11 楼 guoweidonfaini 的回复:
这有 这类 问题 咱可以 先 调试一下,找不到原因, 在发帖 你这样 多浪费开发时间
我找了好久才找到的哈哈
Null_Reference 2014-08-08
  • 打赏
  • 举报
回复
数据库连接是一个数据库么?
奶牛没有奶 2014-08-08
  • 打赏
  • 举报
回复
这有 这类 问题 咱可以 先 调试一下,找不到原因, 在发帖 你这样 多浪费开发时间
奶牛没有奶 2014-08-08
  • 打赏
  • 举报
回复
呵呵 1 只是代表 事务暂时性 提交
threenewbee 2014-08-07
  • 打赏
  • 举报
回复
调试下 trans.Commit(); 这里可能丢出异常,但是t已经是1了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧