如何在方法中返回字符串值
本文关键字:返回 字符串 方法 | 更新日期: 2023-09-27 18:34:15
我做了这样的函数
public int InsertData(CategoryPhoto catphoto)
{
string ans = null;
SqlCommand cmd = DataConnection.GetConnection().CreateCommand();
cmd.CommandText = "prcCategoryPhoto";
cmd.CommandType = CommandType.StoredProcedure;
// cmd.Parameters.Add(new SqlParameter("@PhotoID", prdctphoto.PhotoID));
cmd.Parameters.Add(new SqlParameter("@PhotoName", catphoto.PhotoName));
//cmd.Parameters.Add(new SqlParameter("@LeftPhoto", prdctphoto.LeftPhoto));
//cmd.Parameters.Add(new SqlParameter("@RightPhoto", prdctphoto.RightPhoto));
//cmd.Parameters.Add(new SqlParameter("@BackPhoto", prdctphoto.BackPhoto));
//cmd.Parameters.Add(new SqlParameter("@MaterialPhoto", prdctphoto.MaterialPhoto));
cmd.Parameters.Add(new SqlParameter("@ExtName", catphoto.ExtName));
cmd.Parameters.Add(new SqlParameter("@PhotoType", catphoto.PhotoType));
cmd.Parameters.Add(new SqlParameter("@PhotoSize", catphoto.PhotoSize));
cmd.Parameters.Add(new SqlParameter("@CategoryID", catphoto.CategoryID));
ans = cmd.ExecuteScalar().ToString();
//var result = cmd.ExecuteScalar();
//ans = int.Parse(result.ToString());
cmd.Dispose();
DataConnection.CloseConnection();
return ans;
}
在我的存储过程中是
create proc [dbo].[prcCategoryPhoto]
(
@PhotoName Varchar(100),
@ExtName Varchar(100),
@PhotoType Varchar(100),
@PhotoSize int,
@CategoryID varchar(20)
)
as
insert into CategoryPhoto(PhotoName,ExtName,PhotoType,PhotoSize,CategoryID)
values (@PhotoName,@ExtName,@PhotoType,@PhotoSize,@CategoryID)
select @@IDENTITY
在写入时return ans
它给出了一个错误不能隐式将字符串转换为 int
和写作
return int.Parse(ans);
它给出了 NVarchar 无法转换为 int 的异常
现在试试这个.... `
public string InsertData(CategoryPhoto catphoto)
{
string ans = null;
SqlCommand cmd = DataConnection.GetConnection().CreateCommand();
cmd.CommandText = "prcCategoryPhoto";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@PhotoName", catphoto.PhotoName));
cmd.Parameters.Add(new SqlParameter("@ExtName", catphoto.ExtName));
cmd.Parameters.Add(new SqlParameter("@PhotoType", catphoto.PhotoType));
cmd.Parameters.Add(new SqlParameter("@PhotoSize", catphoto.PhotoSize));
cmd.Parameters.Add(new SqlParameter("@CategoryID", catphoto.CategoryID));
ans = cmd.ExecuteScalar().ToString();
cmd.Dispose();
DataConnection.CloseConnection();
return ans;
}`
请尝试以下操作,首先更改您的过程,添加一个输出参数,如下所示,
create proc [dbo].[prcCategoryPhoto]
(
@PhotoName Varchar(100),
@ExtName Varchar(100),
@PhotoType Varchar(100),
@PhotoSize int,
@CategoryID varchar(20),
@ID INT OUTPUT
)
as
insert into CategoryPhoto(PhotoName,ExtName,PhotoType,PhotoSize,CategoryID)
values (@PhotoName,@ExtName,@PhotoType,@PhotoSize,@CategoryID)
select @ID = @@IDENTITY
接下来修改你的函数,如下所示,
public int InsertData(CategoryPhoto catphoto)
{
SqlCommand cmd = DataConnection.GetConnection().CreateCommand();
cmd.CommandText = "prcCategoryPhoto";
cmd.CommandType = CommandType.StoredProcedure;
// cmd.Parameters.Add(new SqlParameter("@PhotoID", prdctphoto.PhotoID));
cmd.Parameters.Add(new SqlParameter("@PhotoName", catphoto.PhotoName));
//cmd.Parameters.Add(new SqlParameter("@LeftPhoto", prdctphoto.LeftPhoto));
//cmd.Parameters.Add(new SqlParameter("@RightPhoto", prdctphoto.RightPhoto));
//cmd.Parameters.Add(new SqlParameter("@BackPhoto", prdctphoto.BackPhoto));
//cmd.Parameters.Add(new SqlParameter("@MaterialPhoto", prdctphoto.MaterialPhoto));
cmd.Parameters.Add(new SqlParameter("@ExtName", catphoto.ExtName));
cmd.Parameters.Add(new SqlParameter("@PhotoType", catphoto.PhotoType));
cmd.Parameters.Add(new SqlParameter("@PhotoSize", catphoto.PhotoSize));
cmd.Parameters.Add(new SqlParameter("@CategoryID", catphoto.CategoryID));
cmd.Parameters.Add(new SqlParameter("@ID",System.Data.SqlDbType.Int));
cmd.Parameters["@ID"].Direction=System.Data.ParameterDirection.Output;
cmd.ExecuteNonQuery();
var ans = cmd.Parameters["@ID"].Value;
cmd.Dispose();
DataConnection.CloseConnection();
return Convert.ToInt32(ans);
}
在调试器中查看字符串。似乎您有一些无法转换为 int 的字符。 您可以将方法的返回类型从 int 更改为字符串吗?
你应该使用 using
关键字。它确保即使出现问题(即引发异常)也调用dispose
方法。
此外,@@Identity
在任何情况下都返回一个数值(根据 MSDN),该数值应该可转换为整数或 bigint。所以我的建议是:
public Int64 InsertData(CategoryPhoto catphoto)
{
using (var connection = DataConnection.GetConnection)
{
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "prcCategoryPhoto";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@PhotoName", catphoto.PhotoName));
cmd.Parameters.Add(new SqlParameter("@ExtName", catphoto.ExtName));
cmd.Parameters.Add(new SqlParameter("@PhotoType", catphoto.PhotoType));
cmd.Parameters.Add(new SqlParameter("@PhotoSize", catphoto.PhotoSize));
cmd.Parameters.Add(new SqlParameter("@CategoryID", catphoto.CategoryID));
return (Int64)cmd.ExecuteScalar();
}
}
}
如果你的标识列是一个整数,你当然可以更改方法的签名来返回一个int
。
替换
public int InsertData(CategoryPhoto catphoto)
跟
public string InsertData(CategoryPhoto catphoto)
并对其依赖项遵循相同的内容...
ScoapIdentity 会返回你的主键值,这样数据类型就是 int,所以你需要声明到 int 变量(不是字符串变量)。
所以把这行string ans = null;
换成int ans = null;
并且还需要在下面更改此行
ans = Convert.ToInt32(cmd.ExecuteScalar());