使用SqlDataSource调用带参数存储过程插入数据
2010-06-10 11:05
465 查看
最近被朋友问到一个SqlDataSource调用带参数存储过程为什么不成功,代码如下:
是啊,为什么不成功呢,提示的消息是太多的参数,这段代码看起来没什么问题啊。几轮搜索以后,觉得网上说的种种原因,最可能的是参数名要和字段名一致和参数要加@,于是改成:
存储过程里也进行相应的修改,把定义的传入参数和调用的地方都改为@empNo,@empName,仍然失败!错误消息变成了
Procedure or Function 'asdfg' expects parameter '@empNo', which was not supplied.就是没找到@empNo,此时,我有点迷茫。
于是把@去掉,再试,成功。代码如下:
但是会产生两条数据,这段代码是写在DetailsView1_ItemInserting里的,根据以前的经验,这个方法在点DetailsView1的插入按钮时触发,只要InsertCommand中有代码,就会去执行,那么最后的一句SqlDataSource1.Insert()具有相同的作用,所以等于把insertCommand执行了两次,所以会有两条数据。
很奇怪,我一直觉得我遇到的问题别人也一定会遇到过,但是这个例外,尝试了各种搜索条件,没有这个问题。所有的文章都说调用存储过程传参要用@占位符。
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,此时,我有点迷茫。
于是把@去掉,再试,成功。代码如下:
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()
但是会产生两条数据,这段代码是写在DetailsView1_ItemInserting里的,根据以前的经验,这个方法在点DetailsView1的插入按钮时触发,只要InsertCommand中有代码,就会去执行,那么最后的一句SqlDataSource1.Insert()具有相同的作用,所以等于把insertCommand执行了两次,所以会有两条数据。
很奇怪,我一直觉得我遇到的问题别人也一定会遇到过,但是这个例外,尝试了各种搜索条件,没有这个问题。所有的文章都说调用存储过程传参要用@占位符。
相关文章推荐
- 使用SqlDataSource调用带参数存储过程插入数据
- 使用SqlDataSource调用带参数存储过程(获取不到数据?)
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 使用企业库调用存储过程(带参数)完成数据获取样例
- 查询出来的数据,作为参数循环传入存储过程调用
- 使用SqlDataSource插入、更新以及删除数据
- PostgreSQL使用存储过程为插入的数据自动生成ID
- hibernate里使用jdbc方式调用oracle带游标返回参数的简单分页存储过程
- C#中的类SqlCommand对象使用方法ExecuteNonQuery()调用SQLServer存储过程时,存储过程执行成功,数据发生改变,但是返回-1
- DB2使用存储过程插入数据
- MySQL使用存储过程插入千万级数据
- MySQL使用存储过程循环插入数据
- MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
- excel宏调用webservice使用存储过程同步excel数据的方法
- Oracle 使用IN OUT参数创建/调用存储过程
- MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
- oracle中,使用存储过程带数组参数的形式向表中添加数据(存储过程,数组参数,序列,触发器,类型,循环)
- SqlDataSource 调用带参数的存储过程
- 使用存储过程向MySQL批量插入数据
- The DataDirect provider for Oracle调用存储过程使用Cursor类型参数