显示日期(c#winforms)
我有一个包含以下列的SQL表:显示日期(c#winforms),c#,C#,我有一个包含以下列的SQL表: PROFILE ---------------------------------- Name | DateOfBirth | Address | ID ---------------------------------- | | | | | | [Name]是必填字段,而ID是自动递增列。 其余字段不是必需的 在我的表单中再次显示用户信息时,由于不需要DateO
PROFILE
----------------------------------
Name | DateOfBirth | Address | ID
----------------------------------
| | |
| | |
[Name]
是必填字段,而ID
是自动递增列。
其余字段不是必需的
在我的表单中再次显示用户信息时,由于不需要DateOfBirth字段,因此我总是在文本框中获得该值1900-01-01 00:00:00.000
,即使注册时未提供该值
我想做的是,如果没有出生日期,在文本框中显示一个空字符串
以我天真的想法,我编写了一个方法,首先检查DateOfBirth列,如果为null,它将返回一个空字符串,否则,将出生日期作为字符串返回,例如代码>
但它总是返回值“1900-01-01 00:00:00.000”,因为数据库中的字段总是插入此值,即使用户将此字段保留为空白
你能帮我。。。谢谢
我也试过了,但仍然不起作用:
SELECT BIRTHDATE = CASE BIRTHDATE
WHEN CAST('1900-01-01' AS DATETIME) THEN ''
ELSE BIRTHDATE END
FROM USER
我的心理调试技能告诉我,你在插入行时错误地设置了生日。一个很好的检查方法是连接一个探查器(如果您使用的是SQL Server,那么它附带一个),并观察在创建新用户时实际插入的内容
检查正在插入新用户的代码。例如,如果使用的是数据集,请检查“出生日期”列上是否未设置默认约束(单击“数据集设计器”中的单元格,然后检查“属性”网格)
数据库本身也有可能在该列上设置了默认约束,但这种可能性较小。我的心理调试技能告诉我,在插入行时,您错误地设置了生日。一个很好的检查方法是连接一个探查器(如果您使用的是SQL Server,那么它附带一个),并观察在创建新用户时实际插入的内容
检查正在插入新用户的代码。例如,如果使用的是数据集,请检查“出生日期”列上是否未设置默认约束(单击“数据集设计器”中的单元格,然后检查“属性”网格)
数据库本身也有可能在该列上设置了默认约束,但这种可能性较小。您为什么不想这样做
string theDate = GetDateOfBirth().ToString();
txtDateOfBirth.Text = theDate == "1900-01-01 00:00:00.000" ? "" : theDate;
你为什么不想这么做
string theDate = GetDateOfBirth().ToString();
txtDateOfBirth.Text = theDate == "1900-01-01 00:00:00.000" ? "" : theDate;
我已经拿到了!:)
这是我的原始代码:
protected void SaveUser()
{
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT_USER");
cmd.Parameters.Add(new SqlParameter("@NAME", txtName.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@ADDRESS", txtAddress.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@DATEOFBIRTH", txtDateOfBirth.Text.Trim()));
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
}
在我的原始代码中,即使txtDateofBirth
为空,它也会向参数传递一个空字符串,导致数据库插入“1900-01-01 00:00:00.00”,而不是NULL
值。这是修改后的代码。我首先检查txtDateOfBirth
是否为空(假设输入的值是有效日期),如果为真,则添加cmd.Parameters.add(新的SqlParameter(@DATEOFBIRTH),txtDateOfBirth.Text.Trim())
作为插入用户
存储过程的参数。否则,@DATEOFBIRTH
参数根本不会被创建和传递
protected void SaveUser()
{
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT_USER");
cmd.Parameters.Add(new SqlParameter("@NAME", txtName.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@ADDRESS", txtAddress.Text.Trim()));
if(txtDateOfBirth.Text.Trim() != String.Empty)
{
cmd.Parameters.Add(new SqlParameter("@DATEOFBIRTH", txtDateOfBirth.Text.Trim()));
}
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
}
SP:
我已经拿到了!:)
这是我的原始代码:
protected void SaveUser()
{
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT_USER");
cmd.Parameters.Add(new SqlParameter("@NAME", txtName.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@ADDRESS", txtAddress.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@DATEOFBIRTH", txtDateOfBirth.Text.Trim()));
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
}
在我的原始代码中,即使txtDateofBirth
为空,它也会向参数传递一个空字符串,导致数据库插入“1900-01-01 00:00:00.00”,而不是NULL
值。这是修改后的代码。我首先检查txtDateOfBirth
是否为空(假设输入的值是有效日期),如果为真,则添加cmd.Parameters.add(新的SqlParameter(@DATEOFBIRTH),txtDateOfBirth.Text.Trim())
作为插入用户
存储过程的参数。否则,@DATEOFBIRTH
参数根本不会被创建和传递
protected void SaveUser()
{
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT_USER");
cmd.Parameters.Add(new SqlParameter("@NAME", txtName.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@ADDRESS", txtAddress.Text.Trim()));
if(txtDateOfBirth.Text.Trim() != String.Empty)
{
cmd.Parameters.Add(new SqlParameter("@DATEOFBIRTH", txtDateOfBirth.Text.Trim()));
}
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
}
SP:
请将代码发布在GetDateOfBirth()
或其等效项之后。另外,当您直接查询表时(假设使用SQL Server,SQL Server Workbench),您在表中看到了什么SELECT BIRTHDATE FROM USER
。假设用户没有提供他的出生日期:我运行一个简单的SELECT语句:SELECT*FROM users这是结果:USER1 | 1900-01-01 00:00:00.000 | address请将代码发布在GetDateOfBirth()
,或其等效项后面。另外,当您直接查询时,在表中看到了什么(使用,假设SQL Server,SQL Server Workbench)?从用户选择出生日期
。假设用户没有提供他的出生日期:我运行一个简单的SELECT语句:SELECT*FROM USERS这是结果:USER1 | 1900-01-01 00:00:00.000 | Addressprivate string ReturnDateOfBirth(){string dateOfBirth=string.Empty;pl.ConnOpen();pl.cmd=new-SqlCommand(“GET_DATEOFBIRTH”,pl.MySQLConn);pl.cmd.Parameters.Add(new-SqlParameter(@ID),(object)txtID.Text.Trim());pl.cmd.CommandType=CommandType.StoredProcedure;pl.dr=pl.cmd.ExecuteReader();if(pl.dr.HasRows){DATEOFBIRTH=pl.dr[“DATEOFBIRTH”].ToString();}pl.MySQLConn.Close();返回出生日期;}@yonan2236:我实际上是建议问题出在insert中,而不是select中。我还将DateOfBirth列设置为Null,并且没有默认约束。但它似乎总是插入'1900-01-01 00:00:00.000'@yonan2236:好的,那么插入该日期的代码看起来是什么样子的呢?CREATE PROC[dbo]。insert_USER(@NAME VARCHAR(25),@DATEOFBIRTH AS DATETIME=NULL,@ADDRESS AS VARCHAR(100)=NULL)AS BEGIN插入到用户(NAME,DATEOFBIRTH,ADDRESS)值(@NAME,@DATEOFBIRTH,@ADDRESS)END GOprivate string ReturnDateOfBirth(){string DATEOFBIRTH=string.Empty;pl.ConnOpen();pl.cmd=new SqlCommand(“GET_DATEOFBIRTH”,pl.MySQLConn);pl.cmd.Parameters.Add(新的SqlParameter(@ID),(object)txtID.Text.Trim());pl.cmd.CommandType=CommandType.storedProcess;pl.dr=pl.cmd.Execut