[英]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.