|M| 第三贴:我的一个存储过程,如何返回值啊要怎么写 我写的出错 谢谢 超急啊
存储过程
CREATE PROCEDURE [insert_ConcertSite_1]
(
@SiteID int output,
@CityID_1 [int],
@SupplierID_2 [int],
@Address_3 [nvarchar](500),
@SiteName_4 [nvarchar](50),
@MapRoad_5 [nvarchar](500),
@SitePic_6 [nvarchar](500),
@Intro_7 [nvarchar](4000),
@Remark_8 [text])
AS INSERT INTO [HotelBook].[dbo].[ConcertSite]
( [CityID],
[SupplierID],
[Address],
[SiteName],
[MapRoad],
[SitePic],
[Intro],
[Remark])
VALUES
( @CityID_1,
@SupplierID_2,
@Address_3,
@SiteName_4,
@MapRoad_5,
@SitePic_6,
@Intro_7,
@Remark_8)
SET @SiteID = (SELECT scope_identity() )
GO
ASP.NET:
SqlConnection con = ConcertDB.createcon();
SqlCommand com = new SqlCommand( "insert_ConcertSite_1 ", con);
com.CommandType = CommandType.StoredProcedure;
SqlParameter spt = new SqlParameter();
spt = new SqlParameter( "@SiteID ", SqlDbType.Int, 4);
spt.Direction = ParameterDirection.Output;
com.Parameters.Add(spt);
spt = new SqlParameter( "@CityID ", SqlDbType.Int, 4);
spt.Value = ddl_CityName.SelectedValue;
com.Parameters.Add(spt);
spt = new SqlParameter( "@SupplierID ", SqlDbType.Int, 4);
spt.Value = txt_SupplierID.Value;
com.Parameters.Add(spt);
spt = new SqlParameter( "@Address ", SqlDbType.NVarChar, 500);
spt.Value = txt_Address.Text;
com.Parameters.Add(spt);
spt = new SqlParameter( "@SiteName ", SqlDbType.NVarChar, 50);
spt.Value = txt_SiteName.Text;
com.Parameters.Add(spt);
spt = new SqlParameter( "@MapRoad ", SqlDbType.NVarChar, 500);
spt.Value = fud_MapRoad.FileName;
com.Parameters.Add(spt);
spt = new SqlParameter( "@SitePic ", SqlDbType.NVarChar, 500);
spt.Value = fud_SitePic.FileName;
com.Parameters.Add(spt);
spt = new SqlParameter( "@Intro ", SqlDbType.NVarChar, 4000);
spt.Value = txt_Intro.Text;
com.Parameters.Add(spt);
spt = new SqlParameter( "@Remark ", SqlDbType.Text, 16);
spt.Value = txt_Remark.Text;
com.Connection.Open();
int i = Convert.ToInt32(com.ExecuteNonQuery());
int outID = (int)com.Parameters[ "@SiteID "].Value;
com.Connection.Close();
以上出错:
这条int i = Convert.ToInt32(com.ExecuteNonQuery());
提示:将参数值从 String 转换到 Int32 失败。
我想应该是这里出错:
spt = new SqlParameter( "@SiteID ", SqlDbType.Int, 4);
spt.Direction = ParameterDirection.Output;
com.Parameters.Add(spt);
要怎么改啊..谢谢
很急啊
------解决方案--------------------
返回值要这么写:
SqlParameter para = new SqlParameter( "@ReturnValue ",SqlDbType.Int);
para.Direction = ParameterDirection.ReturnValue;
执行完后,断开connection再取值
[解决办法]
自定义函数scope_identity() 返回的值是int型的或是数字吗?
[解决办法]
int i = Convert.ToInt32(com.ExecuteNonQuery());
改为
int i = com.ExecuteNonQuery();
[解决办法]
帮顶
[解决办法]
请问楼主 自定义函数scope_identity() 返回的值是int型的或是数字吗?
[解决办法]
如果 自定义函数scope_identity() 返回的值 是非数字的
int i = Convert.ToInt32(com.ExecuteNonQuery());
此处会抱错的
楼主可以调试下
[解决办法]
抱歉 SCOPE_IDENTITY( ) 是系统函数
sorry
[解决办法]
int i = Convert.ToInt32(com.ExecuteNonQuery());
这里没有语法错误 只是多此一举
因为ExecuteNonQuery()本身返回的就是int
int i = com.ExecuteNonQuery();
spt = new SqlParameter( "@CityID ", SqlDbType.Int, 4);
spt.Value = ddl_CityName.SelectedValue;
com.Parameters.Add(spt);
spt = new SqlParameter( "@SupplierID ", SqlDbType.Int, 4);
spt.Value = txt_SupplierID.Value;
com.Parameters.Add(spt);
应该是这里
你看你传进去的 ddl_CityName.SelectedValue 和 txt_SupplierID.Value
是否不是int类型的值
[解决办法]
存储过程错误
CREATE PROCEDURE [insert_ConcertSite_1]
(
@SiteID int output,
@CityID [int],
@SupplierID [int],
@Address [nvarchar](500),
@SiteName [nvarchar](50),
@MapRoad [nvarchar](500),
@SitePic [nvarchar](500),
@Intro [nvarchar](4000),
@Remark [text])
AS INSERT INTO [ConcertSite]
( [CityID],
[SupplierID],
[Address],
[SiteName],
[MapRoad],
[SitePic],
[Intro],
[Remark])
VALUES
( @CityID,
@SupplierID,
@Address,
@SiteName,
@MapRoad,
@SitePic,
@Intro,
@Remark)
SET @SiteID = (SELECT scope_identity() )
GO
另外少了
spt = new SqlParameter( "@Remark ", SqlDbType.Text, 16);
spt.Value = txt_Remark.Text;
com.Parameters.Add(spt);