繁体   English   中英

DateTime参数问题

[英]DateTime parameter issue

我仅针对字符串参数测试了此方法,并且效果很好。 因此,我确定设置日期时间类型(datapubl)的参数时出错,我稍后将其添加。 先感谢您!

顺便说一句,CatalogCreateFilmsTest存储过程已执行,并且工作正常。

安娜

public static bool CreateFilmTest(string nume, string datapubl)
        {
            DbCommand com = GenericDataAccess.CreateCommand();
            com.CommandText = "CatalogCreateFilmTest";

            DbParameter param = com.CreateParameter();
            param.ParameterName = "@nume";
            param.Value = nume;
            param.DbType = DbType.String;
            param.Size = 200;
            com.Parameters.Add(param);

            param = com.CreateParameter();
            param.ParameterName = "@datapubl";
            param.Value = datapubl;
            param.DbType = DbType.DateTime;
            com.Parameters.Add(param);


            int result = -1;

            try
            {
                result = GenericDataAccess.ExecuteNonQuery(com);

            }
            catch
            {
                // 
            }

            return (result >= 1);

        }

编辑:问题是存储过程甚至没有执行(它应该在表中插入行,但不能)。 没有错误,但也不是正确的结果。

编辑:克里斯,这是完整的示例:

CREATE PROCEDURE CatalogCreateFilmTest(
@nume nvarchar(1500),
@datapubl datetime
)
AS
INSERT INTO Filme
(nume, datapubl) 
VALUES
(@nume, @datapubl)
;
GO

适用于:

EXEC CatalogCreateFilmTest 'achu', '';

然后,我像这样调用CreateFilmTest:

bool success = FilmsAccess.CreateFilmTest(newNume.Text, null);

要么:

bool success = FilmsAccess.CreateFilmTest(newNume.Text, DateTime.Now.ToString());

在这两种情况下,ExecuteNonQuery均不会运行。

由于集合中的引用,我不认为您可以重用相同的变量...

        DbParameter param1 = com.CreateParameter(); 
        param1.ParameterName = "@nume"; 
        param1.Value = nume; 
        param1.DbType = DbType.String; 
        param1.Size = 200; 
        com.Parameters.Add(param1); 


        DbParameter param2 = com.CreateParameter(); 
        param2.ParameterName = "@datapubl"; 
        param2.Value = datapubl; 
        param2.DbType = DbType.DateTime; 
        com.Parameters.Add(param2); 

另请注意,您可以在.net 4(也可能是3.5)中使用类似的语法。

com.Parameters.Add(
  com.CreateParameter()
  { 
    ParameterName = "@datapubl", 
    Value = datapubl, 
    DbType = DbType.DateTime
  }
);

通过填充catch块,可能还有助于了解异常是什么:

catch(Exception ex)
{ 
  System.Diagnostics.Debug.WriteLine(ex.Message); 
} 

编辑:

我相信我现在已经看到了这个问题……(以前应该已经看到了)。

将方法签名更改为:

public static bool CreateFilmTest(string nume, DateTime datapubl) 

并尝试执行以下命令:

bool success = FilmsAccess.CreateFilmTest(newNume.Text, DateTime.Now); 

要传递空值,您必须传递Convert.DbNull前提是您的列允许空值。

为了将字符串作为DateTime值传递,您必须以一种特定的方式设置它们的格式,即YYYYMMDD,但是我建议让底层的DbCommand对象来处理。

您确实应该添加以下行:

    com.CommandType = CommandType.StoredProcedure;

传递时,DateTime是否为空?

如果是,则应进行测试以确保它不是,如果通过,请像这样传递它:

    com.Parameters.AddWithValue("@datapubl, emptyDate == null ? DBNull.Value : (object)emptyDate);

我确定这是问题所在。

希望这会有所帮助。

编辑:

替换整个块:

        param = com.CreateParameter();
        param.ParameterName = "@datapubl";
        param.Value = datapubl;
        param.DbType = DbType.DateTime;
        com.Parameters.Add(param);

通过这样的事情:

       if(Date is null)
       {
         com.Parameters.AddWithValue("@datapubl", emptyDate == null ? DBNull.Value (object)emptyDate);
       }
       else
       {
         com.Parameters.AddWithValue("@datapubl", [Your Date Variable Here]);
       }

试试这个,让我知道它如何为您工作:

    param = new DBParameter("@datapubl", System.Data.DbType.DateTime);
    param.Value = datapubl;
    com.Parameters.Add(param)

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM