从数据类型 decimal 转换为 numeric 时出错

来源:互联网 发布:截图软件snagit 编辑:程序博客网 时间:2024/04/23 21:49

从数据类型 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

这样就解决问题了

原创粉丝点击