gpt4 book ai didi

c# - 日期时间参数问题

转载 作者:行者123 更新时间:2023-12-02 14:29:15 25 4
gpt4 key购买 nike

我单独针对字符串参数测试了此方法,效果非常好。所以我确信DateTime(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 block 也可能有助于了解异常是什么:

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); 

要传递 null,您必须传递 Convert.DbNull(前提是您的列允许 null)。

为了将字符串作为 DateTime 值传递,您必须以特定方式对其进行格式化,即 YYYYMMDD,但是,我建议让底层 DbCommand 对象处理该问题。

关于c# - 日期时间参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10996553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com