C#与sql结合的语句写法有错误,怎么修改,麻烦大神看看!

啰嗦一箩筐 2017-07-14 10:08:46
if (conn.usecmd("update set employee ledate='" + TextBox1.Text.Trim().Equals("") ? (object)DBNull.Value : TextBox1.Text.Trim() + "'") == true)

textbox1框是填写日期的,不知道为何不动它它总会自动添加1900-01-01入数据库,sql表里是datetime类型的字段。明明没有设置默认值。所以没办法就在insert或update时加入这个判断进去。可是这个写法又是错误的,好纠结,请问怎么改正。
错误提示:无法将类型“string”隐式转换为"bool"。与SqlCon.usecmd(sql)最匹配的方法具有一些无效参数。
Ps:上面的conn.usecmd是我写在一个SqlCon类里面的可insert、update、delete数据库的方法,返回bool值,true则成功,反之
...全文
820 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2017-07-19
  • 打赏
  • 举报
回复
引用 26 楼 aierlanhang 的回复:
调试的结果是这样
update employee set contract_start_date=NULL
所以我不是告诉你有bug嘛,分两句拼

string sql = string.format("update set employee ledate={0}", TextBox1.Text.Trim().Equals("") ? "NULL" : "'" + TextBox1.Text.Trim() + "'");
sql += “ AND 其他条件”
if (conn.usecmd(sql))
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 35 楼 xdashewan 的回复:
[quote=引用 32 楼 aierlanhang 的回复:] 然而问题又来了。这次问题出来在:birthday='{0}'。如果tb_csrq有值,调试正确,如果空,那就是birthday='NULL',这里并不需要单引号,提示:从字符串转换日期和/或时间时,转换失败。但是如果birthday={0},去掉单引号,tb_csrq=2005-1-1,那结果就是birthday=2005-1-1,这样没有单引号传入数据库的最终日期也是错误的!这这这……
sqltext += string.format("birthday={0},", tb_csrq.Text.Trim() == "" ? "NULL" : "'" + tb_rzrq.Text.Trim() + "'");
[/quote] 大神,膜拜,终于解决了困扰我已久的问题。后面这个问题解决了才发现平时不都是这么做的嘛,脑子里一堆浆糊,谢谢谢谢!
xdashewan 2017-07-19
  • 打赏
  • 举报
回复
引用 32 楼 aierlanhang 的回复:
然而问题又来了。这次问题出来在:birthday='{0}'。如果tb_csrq有值,调试正确,如果空,那就是birthday='NULL',这里并不需要单引号,提示:从字符串转换日期和/或时间时,转换失败。但是如果birthday={0},去掉单引号,tb_csrq=2005-1-1,那结果就是birthday=2005-1-1,这样没有单引号传入数据库的最终日期也是错误的!这这这……
sqltext += string.format("birthday={0},", tb_csrq.Text.Trim() == "" ? "NULL" : "'" + tb_rzrq.Text.Trim() + "'");
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 33 楼 aierlanhang 的回复:
[quote=引用 32 楼 aierlanhang 的回复:] [quote=引用 31 楼 xdashewan 的回复:] [quote=引用 28 楼 aierlanhang 的回复:] 日期框为空的前面都不带字段值,而且后面的逗号也没有,NULL这里该怎么改啊?
sqltext += string.format("birthday='{0}',", tb_csrq.Text.Trim() == "" ? "NULL" : tb_rzrq.Text.Trim());
[/quote] 然而问题又来了。这次问题出来在:birthday='{0}'。如果tb_csrq有值,调试正确,如果空,那就是birthday='NULL',这里并不需要单引号,提示:从字符串转换日期和/或时间时,转换失败。但是如果birthday={0},去掉单引号,tb_csrq=2005-1-1,那结果就是birthday=2005-1-1,这样没有单引号传入数据库的最终日期也是错误的!这这这……[/quote] 要不然我直接把NUU删了,传值也是传个空值进去,这样总行了吧?[/quote] 把NULL删了也不行!这样即使调试的时候birthday='',可是最后显示出来的又返回为1900-1-1的日期了!!!崩溃啊!
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 32 楼 aierlanhang 的回复:
[quote=引用 31 楼 xdashewan 的回复:] [quote=引用 28 楼 aierlanhang 的回复:] 日期框为空的前面都不带字段值,而且后面的逗号也没有,NULL这里该怎么改啊?
sqltext += string.format("birthday='{0}',", tb_csrq.Text.Trim() == "" ? "NULL" : tb_rzrq.Text.Trim());
[/quote] 然而问题又来了。这次问题出来在:birthday='{0}'。如果tb_csrq有值,调试正确,如果空,那就是birthday='NULL',这里并不需要单引号,提示:从字符串转换日期和/或时间时,转换失败。但是如果birthday={0},去掉单引号,tb_csrq=2005-1-1,那结果就是birthday=2005-1-1,这样没有单引号传入数据库的最终日期也是错误的!这这这……[/quote] 要不然我直接把NUU删了,传值也是传个空值进去,这样总行了吧?
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 31 楼 xdashewan 的回复:
[quote=引用 28 楼 aierlanhang 的回复:] 日期框为空的前面都不带字段值,而且后面的逗号也没有,NULL这里该怎么改啊?
sqltext += string.format("birthday='{0}',", tb_csrq.Text.Trim() == "" ? "NULL" : tb_rzrq.Text.Trim());
[/quote] 然而问题又来了。这次问题出来在:birthday='{0}'。如果tb_csrq有值,调试正确,如果空,那就是birthday='NULL',这里并不需要单引号,提示:从字符串转换日期和/或时间时,转换失败。但是如果birthday={0},去掉单引号,tb_csrq=2005-1-1,那结果就是birthday=2005-1-1,这样没有单引号传入数据库的最终日期也是错误的!这这这……
xdashewan 2017-07-19
  • 打赏
  • 举报
回复
引用 28 楼 aierlanhang 的回复:
日期框为空的前面都不带字段值,而且后面的逗号也没有,NULL这里该怎么改啊?
sqltext += string.format("birthday='{0}',", tb_csrq.Text.Trim() == "" ? "NULL" : tb_rzrq.Text.Trim());
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 21 楼 Iris945 的回复:
if (conn.usecmd(string.Format("update set employee ledate={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +Convert.ToDateTime(TextBox1.Text.Trim()) + "'")) == true)
你这样写也不对。我现在用拼接法写起来。但还是报错。
string sqltext = "update employee set emp_name='" + tb_xm.Text.Trim() + "',";
sqltext += tb_csrq.Text.Trim() == "" ? "NULL" : "birthday='" + tb_rzrq.Text.Trim() + "',";
sqltext += tb_bysj.Text.Trim() == "" ? "NULL" : "bysj='" + tb_bysj.Text.Trim() + "',";
sqltext += tb_rzrq.Text.Trim() == "" ? "NULL" : "job_date='" + tb_rzrq.Text.Trim() + "',";
sqltext += tb_zzrq.Text.Trim() == "" ? "NULL" : "for_job_date='" + tb_zzrq.Text.Trim() + "',";
sqltext += "id_card='" + tb_sfzh.Text.Trim() + "' where emp_code='" + Request.QueryString["id"] + "'";
if (conn.usecmd(sqltext) == true)
如果tb_csrq.Text='1995-6-30', tb_bysj.Text='NULL',tb_rzrq.Text="NULL",tb_zzrq.Text='2016-7-1',调试结果为:
sqltext=‘update employee set birthday='1995-6-30',NULLNULLfor_job_date='2016-7-1',id_card='123456' where emp_code='0703132'’
日期框为空的前面都不带字段值,而且后面的逗号也没有了,NULL这里该怎么改啊?
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 22 楼 dlqdpz2012 的回复:
看那个字段是不是有默认值就行了。
木有默认值,绝对没有!
啰嗦一箩筐 2017-07-19
  • 打赏
  • 举报
回复
引用 27 楼 xdashewan 的回复:
[quote=引用 26 楼 aierlanhang 的回复:] 调试的结果是这样
update employee set contract_start_date=NULL
所以我不是告诉你有bug嘛,分两句拼

string sql = string.format("update set employee ledate={0}", TextBox1.Text.Trim().Equals("") ? "NULL" : "'" + TextBox1.Text.Trim() + "'");
sql += “ AND 其他条件”
if (conn.usecmd(sql))
[/quote] 现在我是用拼接语句写的。又有新问题出现了!
string sqltext = "update employee set emp_name='" + tb_xm.Text.Trim() + "',";
sqltext += tb_csrq.Text.Trim() == "" ? "NULL" : "birthday='" + tb_rzrq.Text.Trim() + "',";
sqltext += tb_bysj.Text.Trim() == "" ? "NULL" : "bysj='" + tb_bysj.Text.Trim() + "',";
sqltext += tb_rzrq.Text.Trim() == "" ? "NULL" : "job_date='" + tb_rzrq.Text.Trim() + "',";
sqltext += tb_zzrq.Text.Trim() == "" ? "NULL" : "for_job_date='" + tb_zzrq.Text.Trim() + "',";
sqltext += "id_card='" + tb_sfzh.Text.Trim() + "',tel='" + tb_lxdh.Text.Trim() + "' where emp_code='" + Request.QueryString["id"] + "'";
if (conn.usecmd(sqltext) == true)
假如 tb_csrq.Text='1995-6-30', tb_bysj.Text='NULL',tb_rzrq.Text="NULL",tb_zzrq.Text='2016-7-1',调试的结果就会显示为:
sqltext=‘update employee set birthday='1995-6-30',NULLNULLfor_job_date='2016-7-1' where emp_code='0703132'’
日期框为空的前面都不带字段值,而且后面的逗号也没有,NULL这里该怎么改啊?
Iris945 2017-07-18
  • 打赏
  • 举报
回复
if (conn.usecmd(string.Format("update set employee ledate={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +Convert.ToDateTime(TextBox1.Text.Trim()) + "'")) == true)
啰嗦一箩筐 2017-07-18
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
[quote=引用 2 楼 aierlanhang 的回复:] 除了textbox1需要插入或者更新,还有别的很多框,这样写也不对,其它地方就报错。应该是这一串字符中的引号、逗号对整个语句有影响了。
报什么错?[/quote] 如果是有两个或以上的日期选择框,update后面跟了where条件的。调试的时候却只出现前面一个日期框的字段le_date=null,后面其它的没有了,关键是连where都没有了,直接把我表里面的所有数据都改了!!!
update employee set le_date={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +TextBox1.Text.Trim() + "',birthday={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +TextBox1.Text.Trim() + "' where code='"+Request.QueryString["id"]+"';
调试的结果是这样
update employee set contract_start_date=NULL
啰嗦一箩筐 2017-07-18
  • 打赏
  • 举报
回复
引用 21 楼 Iris945 的回复:
if (conn.usecmd(string.Format("update set employee ledate={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +Convert.ToDateTime(TextBox1.Text.Trim()) + "'")) == true)
这个加不加Convert.ToDateTime()都无所谓啊,跟这个函数无关。 还有,如果是有两个或以上的日期选择框,update后面跟了where条件的。调试的时候却只出现前面一个日期框的字段le_date=null,后面其它的没有了,关键是连where都没有了,直接把我表里面的所有数据都改了!!!所以这个语句还是不对啊!
update employee set le_date={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +TextBox1.Text.Trim() + "',birthday={0}",TextBox1.Text.Trim().Equals("") ? "NULL" : "'" +Convert.ToDateTime(TextBox1.Text.Trim()) + "' where code='"+Request.QueryString["id"]+"';
啰嗦一箩筐 2017-07-18
  • 打赏
  • 举报
回复
引用 23 楼 ilikeff8 的回复:
你SQL语句都写错了 不是 update set employee ledate= 是 update employee set ledate=
哦,这个倒是粗心大意。系统上不是这么做的。
ilikeff8 2017-07-18
  • 打赏
  • 举报
回复
你SQL语句都写错了 不是 update set employee ledate= 是 update employee set ledate=
异类丶 2017-07-18
  • 打赏
  • 举报
回复
看那个字段是不是有默认值就行了。
及时雨送浆 2017-07-17
  • 打赏
  • 举报
回复
三元表达式加个括号括起来ok了。
绿领巾童鞋 2017-07-17
  • 打赏
  • 举报
回复
不能用sqlparm?非得一定要 拼接字符串。。。。
jlennonxzy 2017-07-15
  • 打赏
  • 举报
回复
引用 17 楼 zhaoyu_m69 的回复:
当做条件和比较大小根本不影响 看你怎么用
是的,处理好格式,varchar保存时间格式非常方便,我一直也是这么用的。
xdashewan 2017-07-14
  • 打赏
  • 举报
回复
引用 5 楼 aierlanhang 的回复:
调试之后sql语句是这样的update set employee ledate={0},提示: '0' 附近有语法错误。
string.format已经把{0}替换掉了,怎么会有{0},你把你改的代码发出来
加载更多回复(16)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧