c# - 日期不与组合选择项目的数据库进行比较
问题描述
我正在创建一个项目,用户必须在 Combobox 中选择日期,但是我在 Combobox 中选择了显示错误日期的日期
字符串未被识别为有效的日期时间。我正在尝试从 slq 中的数据库中获取日期。下面是我的代码
System.Data.DataTable dt;
SqlConnection con=new SqlConnection(@"Data Source=krupal;Initial Catalog=LOANNOTICE;Integrated Security=True");
con.Open();
this.cmbmonth.FormatString = "yyyy/ MM/dd";
// DateTime dat = Convert.ToDateTime(cmbmonth.SelectedItem.ToString("yyyy/MM/dd"));
//var date = cmbmonth.Text;
//var d1 = Convert.ToDateTime(cmbmonth.Text);
// MessageBox.Show("" + d1);
string Querie=("SELECT HCODE ,(select top 1 rtrim(Name) From RNSB_TEST.dbo.FC014076 p with(nolock) where convert(varchar,PrdCd) = convert(varchar,HCODE)) as PrdName,count(*) as NoOfAcc,round(Sum(BAL2802),2) as PrintAmt ,round(SUM(IntAmt),2) as TotalInt,0 as TDSAmount, round(SUM(IntAmt),2) as NetIntAmt, round((Sum(BAL2802) + SUM(IntAmt)),2)as TotalAmt from LOANNOTICE.dbo.UNCLAIM_DEPO with(nolock) where EffeDate='"+Convert.ToDateTime(cmbmonth.SelectedText).ToString("yyyy/MM/dd") + "' group by HCODE union SELECT HCODE, (select top 1 rtrim(Name) From RNSB_TEST.dbo.FC014076 p with(nolock) where convert(varchar, PrdCd) = convert(varchar, HCODE)) as PrdName,count(*) as NoOfAcc,round(Sum(MatAmt), 2) as PrintAmt ,round(SUM(IntAmt), 2) as TotalInt,round(sum(TDS_Amount), 2) as TDSAmount, round(SUM(Net_Int), 2) as NetIntAmt, round((Sum(MatAmt) + SUM(Net_Int)), 2) as TotalAmt from LOANNOTICE.dbo.UNCLAIM_DEPO_TDR with(nolock) where EffeDate = '"+Convert.ToDateTime(cmbmonth.SelectedText).ToString("yyyy/MM/dd") + "' group by HCODE");
SqlCommand cmd = new SqlCommand(Querie, con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
dt = new System.Data.DataTable();
sda.Fill(dt);
任何人有解决方案,请快速告诉我。谢谢。
解决方案
我注意到你在这里有这个空白:
this.cmbmonth.FormatString = "yyyy/ MM/dd"
无论如何,您应该始终检查以字符串形式传递的日期,如果无法转换它们,则抛出异常:
if (!DateTime.TryParse(_date, out DateTime date))
{
throw new InvalidCastException("Not a valid date.");
}
最后,尝试以这种方式设置 SqlCommand 参数,更具可读性,并且您不必处理字符串插值(结帐:
using (DbConnection connection = new SqlConnection("MyConnectionString"))
{
using (DbCommand command = new SqlCommand(connection))
{
command.CommandType = System.Data.CommandType.Text;
command.CommandText = "SELECT * FROM MyTable WHERE Date = @Date";
command.Parameters.Add("@Date", SqlDbType.Date);
command.Parameters["@Date"].Value = date;
}
}
试试看!:)
问候!
推荐阅读
- protocol-buffers - 何时使用定值 protobuf 类型?或者在什么场景下?
- javascript - 如何像 mapStateToProps 类组件中的 useSelector 一样使用
- php - 试图获取非对象的属性“员工”(查看:/Applications/MAMP/htdocs/al-halal/resources/views/leave/allLeave.blade.php)
- django - Django 将额外数据传递给从 ModelViewSet serializer.save() 创建的 ModelSerializer
- java - 在 Quarkus 中使用 ResourceLoader
- html - Angular Html + Css = PDF,生成正确 PDF 的问题
- kotlin - Mockk - 模拟 javax.mail.Message - 获取 java.lang.VerifyError
- python-3.x - requirements.txt 中的库会安装自己的依赖项吗?
- android - RxJava 主题和可完成
- php - 为什么 array() 和 [] 在此示例中的行为不同