从数据类型 decimal 转换为 numeric 时出错。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 从数据类型 decimal 转换为 numeric 时出错。
源错误:
行 46: {
行 47: PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
行 48: int val = cmd.ExecuteNonQuery();行 49: cmd.Parameters.Clear();
行 50: return val;
源文件: E:/VS 2005/统计局/WebApp/DBUtility/SQLHelper.cs 行: 48
堆栈跟踪:
[SqlException (0x80131904): 从数据类型 decimal 转换为 numeric 时出错。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +862234
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +739110
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +188
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1956
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +149
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +903
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +132
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +415
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +135
DBUtility.SqlHelper.ExecuteNonQuery(String connectionString, CommandType cmdType, String cmdText, SqlParameter[] commandParameters) in E:/VS 2005/统计局/WebApp/DBUtility/SQLHelper.cs:48
SQLServerDAL.Article.AddEditArticles(ArticleInfo model) in E:/VS 2005/统计局/WebApp/SQLServerDAL/Article.cs:68
BLL.Article.AddEditArticles(ArticleInfo model) in E:/VS 2005/统计局/WebApp/BLL/Article.cs:19
Admin_Articles_EditArticles.btnAdd_Click(Object sender, EventArgs e) in e:/VS 2005/统计局/WebApp/Web/Admin/Articles/EditArticles.aspx.cs:62
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
USE [APPDB_Web]
GO
/****** 对象: StoredProcedure [dbo].[Pap_Articles] 脚本日期: 12/19/2007 15:49:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Pap_Articles]
(
@dc_Id decimal(18,0) OUTPUT,
@vc_Title varchar(255) ,
@vc_Color varchar(10) ,
@vc_Key varchar(50) ,
@vc_From varchar(50) ,
@txt_text text ,
@i_Userid int ,
@bt_Up bit ,
@dt_Update datetime ,
@bt_Red bit ,
@bt_In bit ,
@bt_Out bit ,
@vc_Author varchar(50) ,
@i_Mid int,
@i_Ret int OUTPUT
)
AS
IF @dc_Id=0
BEGIN
BEGIN TRAN
--添加文章信息
INSERT INTO tb_Articles(
[vc_Title],[vc_Color],[vc_Key],[vc_From],[txt_text],[i_Userid],[bt_Up],[dt_Update],[bt_Red],[bt_In],[bt_Out],[vc_Author],[i_Mid]
)VALUES(
@vc_Title,@vc_Color,@vc_Key,@vc_From,@txt_text,@i_Userid,@bt_Up,@dt_Update,@bt_Red,@bt_In,@bt_Out,@vc_Author,@i_Mid
)
--获取添加后文章编号
IF @@ROWCOUNT=1
BEGIN
SET @dc_Id=@@IDENTITY
END
--插入流程信息
INSERT INTO tb_ArticlesAudiFlowInfo([dc_AID],[i_FlowId],[i_ToUserId],[bt_Auding],[bt_Auded],[bt_Return])
SELECT TOP 1 @dc_Id,i_FlowId,i_UserId,1,0,0 FROM tb_ArticlesAudiFlow where i_MenuId=@i_Mid ORDER BY i_FlowId
IF @@ERROR=0
BEGIN
SET @i_Ret=1 --添加成功
COMMIT TRAN
END
ELSE
BEGIN
SET @i_Ret=0 --添加失败
ROLLBACK TRAN
END
END
最终解决办法:
看关键的红色字,把
/// <summary>/// 添加编辑文章及流程信息
/// </summary>
/// <param name="model"> 文章相关字段 </param>
/// <returns></returns>
public decimal AddEditArticles(ArticleInfo model)
{
SqlParameter[] parameters = SqlHelper.GetCachedParameters( " Pap_Articles " );
if (parameters == null )
{
parameters = new SqlParameter[]{
new SqlParameter("@dc_Id" , SqlDbType.Decimal),
new SqlParameter( " @vc_Title " , SqlDbType.VarChar, 255 ),
new SqlParameter( " @vc_Color " , SqlDbType.VarChar, 10 ),
new SqlParameter( " @vc_Key " , SqlDbType.VarChar, 50 ),
new SqlParameter( " @vc_From " , SqlDbType.VarChar, 50 ),
new SqlParameter( " @txt_text " , SqlDbType.Text),
new SqlParameter( " @i_Userid " , SqlDbType.Int, 4 ),
new SqlParameter( " @bt_Up " , SqlDbType.Bit, 1 ),
new SqlParameter( " @dt_Update " , SqlDbType.DateTime),
new SqlParameter( " @bt_Red " , SqlDbType.Bit, 1 ),
new SqlParameter( " @bt_In " , SqlDbType.Bit, 1 ),
new SqlParameter( " @bt_Out " , SqlDbType.Bit, 1 ),
new SqlParameter( " @vc_Author " , SqlDbType.VarChar, 50 ),
new SqlParameter( " @i_Mid " , SqlDbType.Int, 4 ),
new SqlParameter( " @i_Ret " ,SqlDbType.Int)
};
SqlHelper.CacheParameters( " Pap_Articles " , parameters);
}
parameters[ 0].Direction = ParameterDirection.InputOutput;
parameters[0].Value = model.dc_Id;
parameters[ 1 ].Value = model.vc_Title;
parameters[ 2 ].Value = model.vc_Color;
parameters[ 3 ].Value = model.vc_Key;
parameters[ 4 ].Value = model.vc_From;
parameters[ 5 ].Value = model.txt_text;
parameters[ 6 ].Value = model.i_Userid;
parameters[ 7 ].Value = model.bt_Up;
parameters[ 8 ].Value = model.dt_Update;
parameters[ 9 ].Value = model.bt_Red;
parameters[ 10 ].Value = model.bt_In;
parameters[ 11 ].Value = model.bt_Out;
parameters[ 12 ].Value = model.vc_Author;
parameters[ 13 ].Value = model.i_Mid;
parameters[ 14 ].Direction = ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(SqlHelper.SqlConnectionString, CommandType.StoredProcedure, " Pap_Articles " , parameters);
return ( decimal )parameters[ 0 ].Value;
}
parameters[0].Direction = ParameterDirection.InputOutput;
parameters[0].Value = model.dc_Id;
增加:
parameters[0].Precise=18
parameters[0].Scale=0
这样就解决问题了