注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

_

_

 
 
 

日志

 
 

使用SqlDataSource调用带参数存储过程插入数据  

2014-10-29 02:10:13|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

使用SqlDataSource调用带参数存储过程插入数据

最近被朋友问到一个SqlDataSource调用带参数存储过程为什么不成功,代码如下:

复制代码

使用SqlDataSource调用带参数存储过程插入数据 - redtea - _使用SqlDataSource调用带参数存储过程插入数据 - redtea - _代码

string user_name = ((TextBox)this.DetailsView1.Rows[1].Cells[1].Controls[0]).Text.ToString().Trim();

string pass_word = ((TextBox)this.DetailsView1.Rows[2].Cells[1].Controls[0]).Text.ToString().Trim();
SqlDataSource1.InsertCommand = "pro_newUser";
SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;

SqlDataSource1.InsertParameters.Add("x", TypeCode.String, user_name);
SqlDataSource1.InsertParameters.Add("y", TypeCode.String, pass_word);

SqlDataSource1.Insert()

复制代码

??????? 是啊,为什么不成功呢,提示的消息是太多的参数,这段代码看起来没什么问题啊。几轮搜索以后,觉得网上说的种种原因,最可能的是参数名要和字段名一致和参数要加@于是改成:

复制代码

string user_name = ((TextBox)this.DetailsView1.Rows[1].Cells[1].Controls[0]).Text.ToString().Trim();??
string pass_word = ((TextBox)this.DetailsView1.Rows[2].Cells[1].Controls[0]).Text.ToString().Trim();??
SqlDataSource1.InsertCommand = "pro_newUser";??
SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;??
SqlDataSource1.InsertParameters.Add("@empNo", TypeCode.String, user_name);??
SqlDataSource1.InsertParameters.Add("@empName", TypeCode.String, pass_word);??
SqlDataSource1.Insert()

复制代码

存储过程里也进行相应的修改,把定义的传入参数和调用的地方都改为@empNo,@empName,仍然失败!错误消息变成了

Procedure or Function 'asdfg' expects parameter '@empNo', which was not supplied.就是没找到@empNo,此时,我有点迷茫。

于是把@去掉,再试,成功。代码如下:

?

1

2

3

4

5

<p> </p>

<div class="cnblogs_code" style="width: 1063px; height: 327px;" onclick="cnblogs_code_show('dc866ee1-3108-4db4-9dae-a8349ca9953b')"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif"></a></span></div><img class="code_img_closed" id="code_img_closed_dc866ee1-3108-4db4-9dae-a8349ca9953b" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img class="code_img_opened" id="code_img_opened_dc866ee1-3108-4db4-9dae-a8349ca9953b" style="display: none;" onclick="cnblogs_code_hide('dc866ee1-3108-4db4-9dae-a8349ca9953b',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">代码</span><div class="cnblogs_code_hide" id="cnblogs_code_open_dc866ee1-3108-4db4-9dae-a8349ca9953b"><pre><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 0);"><p><span style="font-family: Courier New; background-color: rgb(245, 245, 245);">string user_name = ((TextBox)this.DetailsView1.Rows[1].Cells[1].Controls[0]).Text.ToString().Trim();</span></p><p><span style="font-family: Courier New; background-color: rgb(245, 245, 245);">??????? string pass_word = ((TextBox)this.DetailsView1.Rows[2].Cells[1].Controls[0]).Text.ToString().Trim();<br>??????? SqlDataSource1.InsertCommand = "pro_newUser";<br>??????? SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;</span></p><p><span style="font-family: Courier New; background-color: rgb(245, 245, 245);">??????? SqlDataSource1.InsertParameters.Add("empNo", TypeCode.String, user_name);<br>??????? SqlDataSource1.InsertParameters.Add("empName", TypeCode.String, pass_word);</span></p><p><span style="font-family: Courier New; background-color: rgb(245, 245, 245);">??????? SqlDataSource1.Insert()</span></p><br><br></span></div></pre>

</div>

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"><img alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif"></a></span></div></div>

<p> </p>

但是会产生两条数据,这段代码是写在DetailsView1_ItemInserting里的,根据以前的经验,这个方法在点DetailsView1的插入按钮时触发,只要InsertCommand中有代码,就会去执行,那么最后的一句SqlDataSource1.Insert()具有相同的作用,所以等于把insertCommand执行了两次,所以会有两条数据。

很奇怪,我一直觉得我遇到的问题别人也一定会遇到过,但是这个例外,尝试了各种搜索条件,没有这个问题。所有的文章都说调用存储过程传参要用@占位符。

  评论这张
 
阅读(299)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017