我做了这样的功能
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的异常
答案 0 :(得分:1)
现在尝试这个.... `
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;
}`
答案 1 :(得分:1)
尝试以下, 首先改变你的程序,添加一个输出参数,如下所示,
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);
}
答案 2 :(得分:0)
在调试器中查看您的字符串(和)。好像你有一些无法转换为int的字符。你能将方法的返回类型从int更改为string吗?
答案 3 :(得分:0)
您应该使用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();
}
}
}
如果您的identity-column是一个整数,您当然可以更改方法的签名以返回int
。
答案 4 :(得分:0)
替换
public int InsertData(CategoryPhoto catphoto)
与
public string InsertData(CategoryPhoto catphoto)
并遵循相同的依赖...
答案 5 :(得分:0)
ScoapIdentity将返回您的primarykey值,因此数据类型为int,因此您需要声明为int变量(不是字符串变量)。
所以将此行string ans = null;
替换为int ans = null;
并且还需要更改此行
ans = Convert.ToInt32(cmd.ExecuteScalar());