cmd.ExecuteScalar() 为什么取得的数值是0?

epui2008 2017-03-03 11:19:50
  using (con)
{


con.Open();
// 执行插入语句,并取得插入数据的首行首列
int uid = Convert.ToInt32(cmd.ExecuteScalar());
Response.Write(uid.ToString());
Response.End();
cmd.CommandText = "insert into customer2013_address (addtime,danwei,shoujianren,dizhi,utel,uphone,ismoren,uid)values(@addtime,@danwei,@shoujianren,@dizhi,@utel,@uphone,@ismoren,@uid)";

cmd.Parameters.AddWithValue("@shoujianren", xingming);
cmd.Parameters.AddWithValue("@ismoren", true);
cmd.Parameters.AddWithValue("@uid", uid);
cmd.ExecuteNonQuery();



}
...全文
302 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2017-03-03
  • 打赏
  • 举报
回复
引用 13 楼 epui2008 的回复:
取得值了;谢谢 !版主!谢谢各位 “”
注意一下 ,cmd.ExecuteScalar() 也同时会运行 insert 语句。所以之前就不要在插入了。免得重复插入
epui2008 2017-03-03
  • 打赏
  • 举报
回复
引用 12 楼 hanjun0612 的回复:
[quote=引用 11 楼 epui2008 的回复:] 感谢, select 'Hello' 这是嘛意思呢?
一个插入语法而已。[/quote]
引用 12 楼 hanjun0612 的回复:
[quote=引用 11 楼 epui2008 的回复:] 感谢, select 'Hello' 这是嘛意思呢?
一个插入语法而已。[/quote] 我以为你不小心打错的,我把 select 'Hello' 去掉了 ,运行成功 了!
insert into customer2013_address (addtime,danwei,shoujianren,dizhi,utel,uphone,ismoren,uid)values(@addtime,@danwei,@shoujianren,@dizhi,@utel,@uphone,@ismoren,@uid);select @@identity";
,..然后取值 用
 int uid = Convert.ToInt32(cmd.ExecuteScalar());
取得值了;谢谢 !版主!谢谢各位 “”
正怒月神 版主 2017-03-03
  • 打赏
  • 举报
回复
引用 11 楼 epui2008 的回复:
感谢, select 'Hello' 这是嘛意思呢?
一个插入语法而已。
epui2008 2017-03-03
  • 打赏
  • 举报
回复
引用 9 楼 hanjun0612 的回复:
你可能说的是这种写法 string sql = "insert into Users(uName) select 'Hello' ;select @@identity"; 那段select @@identity
SqlConnection con = new SqlConnection("server=.;database=Movies;uid=sa;pwd=sasa");
            string sql = "insert into Users(uName) select 'Hello' ;select @@identity";
            SqlCommand cmd = new SqlCommand(sql,con);
            con.Open();
            var v = cmd.ExecuteScalar();
            con.Close();
感谢, select 'Hello' 这是嘛意思呢?
epui2008 2017-03-03
  • 打赏
  • 举报
回复
基本上每个问题到最后都会不了了之
正怒月神 版主 2017-03-03
  • 打赏
  • 举报
回复
你可能说的是这种写法 string sql = "insert into Users(uName) select 'Hello' ;select @@identity"; 那段select @@identity
SqlConnection con = new SqlConnection("server=.;database=Movies;uid=sa;pwd=sasa");
            string sql = "insert into Users(uName) select 'Hello' ;select @@identity";
            SqlCommand cmd = new SqlCommand(sql,con);
            con.Open();
            var v = cmd.ExecuteScalar();
            con.Close();
epui2008 2017-03-03
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
cmd.CommandText = "select Max(id) from ....."; int uid = Convert.ToInt32(cmd.ExecuteScalar());
我遇到的问题就是 取得 刚插入的记录的ID 我百度很多人这样写,int uid = Convert.ToInt32(cmd.ExecuteScalar()); 如果 按您这样的话 ,肯定可以,但是 会不会在高并发时候取错值呢?
正怒月神 版主 2017-03-03
  • 打赏
  • 举报
回复
cmd.CommandText = "select Max(id) from ....."; int uid = Convert.ToInt32(cmd.ExecuteScalar());
epui2008 2017-03-03
  • 打赏
  • 举报
回复
不好意思,两位,我的代码没有贴完。。
 
..........
//以上获取各表单的值
//以下插入数据记录,插入后取得id值 
        SqlConnection con = new SqlConnection(_connstring);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "insert into customer(danwei,uname,password,nicheng,xingming,xingzhi,dizhi,utel,uphone) values(@danwei,@uname,@password,@nicheng,@xingming,@xingzhi,@dizhi@utel,@uphone)";            
        cmd.Connection = con;
       //... 此处为参数
        cmd.Parameters.AddWithValue("@danwei", danwei);
//....参数
        using (con)
        {
            
           
                con.Open();
                // 执行插入语句,并取得插入数据的首行首列 即ID值 ,然后把ID值作为一个字段值插入另一个表中
               int uid = Convert.ToInt32(cmd.ExecuteScalar());
                Response.Write(uid.ToString());
                Response.End();
                cmd.CommandText = "insert into customer2013_address (addtime,danwei,shoujianren,dizhi,utel,uphone,ismoren,uid)values(@addtime,@danwei,@shoujianren,@dizhi,@utel,@uphone,@ismoren,@uid)";

                cmd.Parameters.AddWithValue("@shoujianren", xingming);
                cmd.Parameters.AddWithValue("@ismoren", true);
                cmd.Parameters.AddWithValue("@uid", uid);
                cmd.ExecuteNonQuery();
           
           

        }

   
      
问题: 第一步插入是OK 的,这样 的话, int uid = Convert.ToInt32(cmd.ExecuteScalar()); 这句我应该取得 刚插入的记录的ID 值 比如自动生成的ID 是100 那 uid应该为100,这时候我把 uid 值100放入新 表中 作为一个字段,但是 总是取不到100 ,而是0 ,不知道哪里搞错了??
EnForGrass 2017-03-03
  • 打赏
  • 举报
回复
sql语句呢,自己好好学学ado.net,
欧皇神降术 2017-03-03
  • 打赏
  • 举报
回复
  // 执行插入语句,并取得插入数据的首行首列
               int uid = Convert.ToInt32(cmd.ExecuteScalar());
你这个ExecuteScalar执行的SQL语句呢?
  • 打赏
  • 举报
回复
你要取什么值?对应的sql呢
正怒月神 版主 2017-03-03
  • 打赏
  • 举报
回复
你的执行顺序。。。。
  • 打赏
  • 举报
回复
cmd.ExecuteNonQuery 不是ExecuteScalar

62,074

社区成员

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

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

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

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