更新:
我认为问题是:
为什么命令用参数值替换值GETDATE()
虽然DATE_CREATED
在DATE_CREATED
命令查询中不存在?
我在Select
声明中也遇到了问题...
如何GETDATE()
工作?
我在使用 SQL Server 插入查询时遇到问题。
我放入GETDATE()
了插入查询,但我也放入了以DATE_CREATE
值命名的参数0001/01/01
。
当我执行插入查询时,它会抛出异常
SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。
请帮助我找出导致此错误的原因。
P/s: 对不起我的英语不好
表创建代码:
CREATE TABLE [dbo].[USER](
[USER_ID] [int] NOT NULL,
[USER_NAME] [nvarchar](100) NOT NULL,
[DATE_CREATED] [datetime] NOT NULL,
CONSTRAINT [PK_USER] PRIMARY KEY CLUSTERED ([USER_ID] ASC)
) ON [PRIMARY]
GO
C#代码:
private void Working()
{
//Get a SQL Connection
IDbConnection con = GetConnection();
USER user = new USER();
user.USER_ID = 1;
user.USER_NAME = "User";
user.DATE_CREATED = new DateTime(1, 1, 1);
USERDao dao = new USERDao(con);
con.Open();
try{
Insert(con,user);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
}
private int Insert(IDbConnection con,USER obj)
{
IDbCommand command;
command = con.CreateCommand();
string query = @"INSERT INTO USER (USER_ID, USER_NAME, DATE_CREATED)
VALUES (@USER_ID, @USER_NAME, GETDATE())";
command.CommandText = query +";";
addDbDataParameter(command, "USER_ID", obj.USER_ID, DbType.Int32);
addDbDataParameter(command, "USER_NAME", obj.USER_NAME, DbType.String);
addDbDataParameter(command, "DATE_CREATED", obj.DATE_CREATED, DbType.DateTime);
int res = command.ExecuteNonQuery();
if (res == 0) { throw new Exception("Zero rows were affected."); }
return res;
}
static public void addDbDataParameter(IDbCommand command, string name, object value, DbType dbType)
{
IDbDataParameter parameter = command.CreateParameter();
parameter.DbType = dbType;
parameter.Direction = ParameterDirection.Input;
parameter.ParameterName = "@" + name;
//parameter.SourceColumn = name;
if (value == null) { parameter.Value = DBNull.Value; }
else { parameter.Value = value; }
command.Parameters.Add(parameter);
}
如您所见,DATE_CREATED
插入查询中没有命名参数(它的GETDATE()
值),但命令仍然添加user.DATE_CREATED
.
P/s:我通过从命令中删除 addParameter 来修复它DATE_CREATED
,并且它有效。
我希望你能帮助我了解它导致问题的原因...... :(