3

我有一个这样的存储过程:

ALTER PROCEDURE [dbo].[usp_CSR_UpdateDailyCustomerWithLCDHistory]
    -- Add the parameters for the stored procedure here
    @person_id numeric(18, 0),
    @last_contact_date datetime,
    @source nvarchar(50),
    @callLogId int,
    @createdBy nvarchar(50)
AS
BEGIN...END

在我的代码中,我将此存储过程称为:

public void UpdateDailyCustomerWithLCDHistory(string callerId, 
    int callLogId, string csrName)
{
    try
    {
        Database db = DatabaseFactory.CreateDatabase
           ("MarketingWriteConnectionString");
        DbCommand dbCommand = 
           db.GetStoredProcCommand("usp_CSR_UpdateDailyCustomerWithLCDHistory");
        dbCommand.CommandTimeout = AppSetting.Instance.GetCommandTimeout();

        db.AddInParameter(dbCommand, "person_id", DbType.Decimal, callerId);
        db.AddInParameter(dbCommand, "last_contact_date", DbType.Date,
            DateTime.Now.ToShortDateString());
        db.AddInParameter(dbCommand, "source", DbType.String, "CSR");
        db.AddInParameter(dbCommand, "callLogId", DbType.Int32, callLogId);
        db.AddInParameter(dbCommand, "createdBy", DbType.String, csrName);

        db.ExecuteNonQuery(dbCommand);
    }
}

这是我的表结构:

CREATE TABLE [dbo].[tblDailyCustomerLastContactDateHistory](
    [person_id] [numeric](18, 0) NOT NULL,
    [source] [nvarchar](50) NOT NULL,
    [callLogId] [int] NULL,
    [createdBy] [nvarchar](50) NULL,
    [last_contact_date] [datetime] NOT NULL,

部署应用程序后,出现错误

无法将参数值从字符串转换为小数

很多时候,虽然不是一直。谁能告诉我可能出了什么问题?

4

2 回答 2

2
public void UpdateDailyCustomerWithLCDHistory(string callerId, int callLogId, string csrName)
{
    try
    {
        Database db = DatabaseFactory.CreateDatabase("MarketingWriteConnectionString");
        DbCommand dbCommand = db.GetStoredProcCommand("usp_CSR_UpdateDailyCustomerWithLCDHistory");
        dbCommand.CommandTimeout = AppSetting.Instance.GetCommandTimeout();

        db.AddInParameter(dbCommand, "person_id", DbType.Decimal, callerId);

callId 是一个字符串,您需要在分配给值之前将其转换为小数。

您可以使用 Decimal.TryParse() 将字符串转换为十进制数。 http://msdn.microsoft.com/en-us/library/system.decimal.tryparse.aspx

于 2012-10-19T20:50:03.773 回答
0

如果您需要数字标识符,我建议您使用INTId 而不是(十进制)字段。NUMERIC除非您的 ID 为 1.2、1.3 等。

另外,请看一下AddWithValue- 您不必在 .NET 代码中指定类型。该框架将为您处理。

最后,如果callerId不是匹配类型,您应该更改它或至少转换它。

于 2012-10-19T20:49:03.033 回答